关于循环次数计算的问题?

原程序:
import random
secret = random.randint(1,99)
guess=0
tries=0
print "AHOY! im the dread print Roberts,and i have a secret!"
print "it
s a nunber form 1 to 99.ill give you 6 tries"
while guess != secret and tries < 6:
guess =input("what
s yer guess?")
if guess print "too low,ye scurvy dog!"
elif guess > secret:
print "too high,landlubber!"

        tries = tries + 1

if guess ==secret:
print "avast!ye got it! found my secret,ye did!"
else:
print "no more guesses!better luck next time,matey!"
print "the secret numaber was",secret

F5之后:
Python 2.7.5 (default, May 15 2013, 22:43:36) [MSC v.1500 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.

================================ RESTART ================================

AHOY! im the dread print Roberts,and i have a secret!
it
s a nunber form 1 to 99.ill give you 6 tries
what
s yer guess?50
too low,ye scurvy dog!
whats yer guess?90
too high,landlubber!
what
s yer guess?80
too high,landlubber!
whats yer guess?70
too high,landlubber!
what
s yer guess?60
too low,ye scurvy dog!
whats yer guess?75
too high,landlubber!
what
s yer guess?70
too high,landlubber!
what`s yer guess?65
too high,landlubber!
no more guesses!better luck next time,matey!
the secret numaber was 62

为什么**tries < 6:** 但是结果却是50,90,80,70,60,75,70,65共计8次呢?

3个回答

你是guess > secret时才会+1,如果 too low输入 100次也不会结束,就是明白?就是 不要把tries = tries + 1和前面那一行并列,和下面一行if 并列,因为你把tries = tries + 1放入到了elif中

fnmdp233
fnmdp233 谢谢为我解答。
大约一年之前 回复
 mport random
secret = random.randint(1,100)
guess = 0
tries = 0
print "AHOY I'm the Dread Pirate Roberts, and I have a secret!"
print "It is a number from 1 to 99. I will give you 6 tries. "
while guess !=secret and tries < 6 :
    guess = input("what is yer guess? ")
    if guess < secret:
        print "Too low, ye scurvy dog!"
    elif guess > secret:
        print "Too high, landlubber!"
    tries = tries + 1     
    if guess == secret:
        print "Avast! Ye got it! Found my secret, ye did !"
    elif tries >= 6:
        print "No more gusses ! Better luck next time ,matey!"
        print "The secret number was",secret

python 3的代码看这里:https://blog.csdn.net/a245049656/article/details/79206148
我就不写了。

fnmdp233
fnmdp233 谢谢为我解答。
大约一年之前 回复

你放代码的时候直接放代码框里,不然排版出问题,其他语言还好,python的缩进影响程序的运行,你这里运行了8次应该是把
tries = tries + 1

放到了elif里面,应该每次猜都要+1,与elif并列

下面我放的python3的代码,print有区别

 import random
secret = random.randint(1,99)
guess=0
tries=0
print ("AHOY! im the dread print Roberts,and i have a secret!")
print ("its a nunber form 1 to 99.ill give you 6 tries")
while guess != secret and tries < 6:
    guess = int(input("whats yer guess?"))
    if guess :
        print ("too low,ye scurvy dog!")
    elif guess > secret:
        print("too high,landlubber!")
    tries = tries + 1
    if guess ==secret:
        print ("avast!ye got it! found my secret,ye did!")
    else:
        print ("no more guesses!better luck next time,matey!")
print ("the secret numaber was",secret)
fnmdp233
fnmdp233 谢谢为我解答。
大约一年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
pagerank的计算问题不够10个字
对同一个数据集,teleport参数相同,计算Rnew的循环次数相同, 使用基本的pagerank计算公式和BlockStripeUpdata算法计算的结果出现了不同结果,这个是正常的吗 循环1次计算Rnew的结果是一样的,但是循环了50次就不一样了
请问大佬们,我用python编写了一个id3算法,如何让让用户自己输入数据来验证这些数据对应的结果?
#--coding:GBK # -*- coding: utf-8 -*- #pip install matplotlib from math import log ##创建数据集 def createDataSet(): """ 创建数据集 """ dataSet = [['青年', '否', '否', '一般', '拒绝'], ['青年', '否', '否', '好', '拒绝'], ['青年', '是', '否', '好', '同意'], ['青年', '是', '是', '一般', '同意'], ['青年', '否', '否', '一般', '拒绝'], ['中年', '否', '否', '一般', '拒绝'], ['中年', '否', '否', '好', '拒绝'], ['中年', '是', '是', '好', '同意'], ['中年', '否', '是', '非常好', '同意'], ['中年', '否', '是', '非常好', '同意'], ['老年', '否', '是', '非常好', '同意'], ['老年', '否', '是', '好', '同意'], ['老年', '是', '否', '好', '同意'], ['老年', '是', '否', '非常好', '同意'], ['老年', '否', '否', '一般', '拒绝'], ] featureName = ['年龄', '有工作', '有房子', '信贷情况'] # 返回数据集和每个维度的名称 return dataSet, featureName ##分割数据集 def splitDataSet(dataSet,axis,value): """ 按照给定特征划分数据集 :param axis:划分数据集的特征的维度 :param value:特征的值 :return: 符合该特征的所有实例(并且自动移除掉这维特征) """ # 循环遍历dataSet中的每一行数据 retDataSet = [] for featVec in dataSet: if featVec[axis] == value: reduceFeatVec = featVec[:axis] # 删除这一维特征,切片不包括axis reduceFeatVec.extend(featVec[axis+1:]) #把aixs去掉之后的列表前后拼在一起 retDataSet.append(reduceFeatVec) return retDataSet#把去掉axis之后的列表返回 ##计算信息熵 # 计算的始终是类别标签的不确定度 def calcShannonEnt(dataSet): """ 计算训练数据集中的Y随机变量的香农熵 :param dataSet: :return: """ numEntries = len(dataSet) # 实例的个数 labelCounts = {} for featVec in dataSet: # 遍历每个实例,统计标签的频次 currentLabel = featVec[-1] # 表示最后一列,,为什么要等与最后一列 # 当前标签不在labelCounts map中,就让labelCounts加入该标签 if currentLabel not in labelCounts.keys(): labelCounts[currentLabel] =0 labelCounts[currentLabel] +=1 shannonEnt = 0.0#初始化香农熵,香农熵越小纯度越高 for key in labelCounts: prob = float(labelCounts[key]) / numEntries shannonEnt -= prob * log(prob,2) # log base 2, return shannonEnt#返回列表的总香农熵 ## 计算条件熵 def calcConditionalEntropy(dataSet,i,featList,uniqueVals): """ 计算x_i给定的条件下,Y的条件熵 :param dataSet: 数据集 :param i: 维度i :param featList: 数据集特征列表 :param unqiueVals: 数据集特征集合 :return: 条件熵 """ ce = 0.0 for value in uniqueVals: subDataSet = splitDataSet(dataSet,i,value) prob = len(subDataSet) / float(len(dataSet)) # 极大似然估计概率 ce += prob * calcShannonEnt(subDataSet) #∑pH(Y|X=xi) 条件熵的计算 return ce ##计算信息增益 def calcInformationGain(dataSet,baseEntropy,i): """ 计算信息增益 :param dataSet: 数据集 :param baseEntropy: 数据集中Y的信息熵 :param i: 特征维度i :return: 特征i对数据集的信息增益g(dataSet | X_i) """ featList = [example[i] for example in dataSet] # 第i维特征列表 uniqueVals = set(featList) # 换成集合 - 集合中的每个元素不重复 newEntropy = calcConditionalEntropy(dataSet,i,featList,uniqueVals)#计算条件熵, infoGain = baseEntropy - newEntropy # 信息增益 = 信息熵 - 条件熵 return infoGain ## 算法框架 def chooseBestFeatureToSplitByID3(dataSet): """ 选择最好的数据集划分 :param dataSet: :return: """ numFeatures = len(dataSet[0]) -1 # 最后一列是分类 baseEntropy = calcShannonEnt(dataSet) #返回整个数据集的信息熵 bestInfoGain = 0.0 bestFeature = -1 for i in range(numFeatures): # 遍历所有维度特征 infoGain = calcInformationGain(dataSet,baseEntropy,i) #返回具体特征的信息增益 if(infoGain > bestInfoGain): bestInfoGain = infoGain bestFeature = i return bestFeature # 返回最佳特征对应的维度 def createTree(dataSet,featureName,chooseBestFeatureToSplitFunc = chooseBestFeatureToSplitByID3): """ 创建决策树 :param dataSet: 数据集 :param featureName: 数据集每一维的名称 :return: 决策树 """ classList = [example[-1] for example in dataSet] # 类别列表 if classList.count(classList[0]) == len(classList): # 统计属于列别classList[0]的个数 return classList[0] # 当类别完全相同则停止继续划分 if len(dataSet[0]) ==1: # 当只有一个特征的时候,遍历所有实例返回出现次数最多的类别 return majorityCnt(classList) # 返回类别标签 bestFeat = chooseBestFeatureToSplitFunc(dataSet)#最佳特征对应的索引 bestFeatLabel = featureName[bestFeat] #最佳特征 myTree ={bestFeatLabel:{}} # map 结构,且key为featureLabel del (featureName[bestFeat]) # 找到需要分类的特征子集 featValues = [example[bestFeat] for example in dataSet] uniqueVals = set(featValues) for value in uniqueVals: subLabels = featureName[:] # 复制操作 myTree[bestFeatLabel][value] = createTree(splitDataSet(dataSet,bestFeat,value),subLabels) return myTree # 测试决策树的构建 dataSet,featureName = createDataSet() myTree = createTree(dataSet,featureName) print(myTree)
c/c++求救,问题大概是计算两数组中出现相同数字的次数?
c/c++大神求救 描述:如下是3辆入库车、3辆出库车,每辆车上有3个数字,现需要查找两边车辆上数字的联系数,计算每辆入库车上的数字出现在几辆出库车上,求每辆车的联系数? Intruck **1**: 1 4 8,Intruck **2**: 3 6 9,Intruck **3**: 2 7 5。Outtruck **1**: 2 5 8,Outtruck **2**: 3 7 4,Outtruck **3**:1 6 9 。 例:1入库车上1、4、8出现在了三辆出库车上,则1入库车联系数为3。 2入库车上3 6 9出现在了两辆出库车上,则2入库车联系数为2。 我自己把这问题看作是两个二维数字,但这算出来结果不对,它全都会循环一遍,然后联系数都为3。请教大神,如何编辑??在线等 ``` for(i=0;i<I;i++) { correlation1[i]=0; for(m=0;m<UNLLOAD;m++) { for(j=0;j<J;j++) { for(n=0;n<UNLLOAD;n++) { if(intruck[i].content[m].ccode==outtruck[j].content[n].ccode) { correlation1[i]++; break; } } } } } ```
tracert程序编译成功运行后,无法正常发送接收包,输出结果只有123456789101112131415161718192021222324252627282930,不显示详细情况,单步运行后发现接收发送包的部分没执行
![图片说明](https://img-ask.csdn.net/upload/201911/30/1575117089_191288.jpg) #include <iostream> #include <winsock2.h> #include <ws2tcpip.h> using namespace std; #pragma comment(lib, "Ws2_32.lib") //IP报头 typedef struct IP_HEADER { unsigned char hdr_len:4; //4位头部长度 unsigned char version:4; //4位版本号 unsigned char tos; //8位服务类型 unsigned short total_len; //16位总长度 unsigned short identifier; //16位标识符 unsigned short frag_and_flags; //3位标志加13位片偏移 unsigned char ttl; //8位生存时间 unsigned char protocol; //8位上层协议号 unsigned short checksum; //16位校验和 unsigned long sourceIP; //32位源IP地址 unsigned long destIP; //32位目的IP地址 } IP_HEADER; //ICMP报头 typedef struct ICMP_HEADER { BYTE type; //8位类型字段 BYTE code; //8位代码字段 USHORT cksum; //16位校验和 USHORT id; //16位标识符 USHORT seq; //16位序列号 } ICMP_HEADER; //报文解码结构 typedef struct DECODE_RESULT { USHORT usSeqNo; //序列号 DWORD dwRoundTripTime; //往返时间 in_addr dwIPaddr; //返回报文的IP地址 }DECODE_RESULT; //计算网际校验和函数 USHORT checksum( USHORT *pBuf, int iSize ) { unsigned long cksum = 0; while( iSize > 1 ) { cksum += *pBuf++; iSize -= sizeof(USHORT); } if( iSize )//如果 iSize 为正,即为奇数个字节 { cksum += *(UCHAR *)pBuf; //则在末尾补上一个字节,使之有偶数个字节 } cksum = ( cksum >> 16 ) + ( cksum&0xffff ); cksum += ( cksum >> 16 ); return (USHORT)( ~cksum ); } //对数据包进行解码 BOOL DecodeIcmpResponse(char * pBuf, int iPacketSize, DECODE_RESULT &DecodeResult, BYTE ICMP_ECHO_REPLY, BYTE ICMP_TIMEOUT) { //检查数据报大小的合法性 IP_HEADER* pIpHdr = ( IP_HEADER* )pBuf; int iIpHdrLen = pIpHdr->hdr_len * 4; //ip报头的长度是以4字节为单位的 //若数据包大小 小于 IP报头 + ICMP报头,则数据报大小不合法 if ( iPacketSize < ( int )( iIpHdrLen + sizeof( ICMP_HEADER ) ) ) return FALSE; //根据ICMP报文类型提取ID字段和序列号字段 ICMP_HEADER *pIcmpHdr = ( ICMP_HEADER * )( pBuf + iIpHdrLen );//ICMP报头 = 接收到的缓冲数据 + IP报头 USHORT usID, usSquNo; if( pIcmpHdr->type == ICMP_ECHO_REPLY ) //ICMP回显应答报文 { usID = pIcmpHdr->id; //报文ID usSquNo = pIcmpHdr->seq; //报文序列号 } else if( pIcmpHdr->type == ICMP_TIMEOUT )//ICMP超时差错报文 { char * pInnerIpHdr = pBuf + iIpHdrLen + sizeof( ICMP_HEADER ); //载荷中的IP头 int iInnerIPHdrLen = ( ( IP_HEADER * )pInnerIpHdr )->hdr_len * 4; //载荷中的IP头长 ICMP_HEADER * pInnerIcmpHdr = ( ICMP_HEADER * )( pInnerIpHdr + iInnerIPHdrLen );//载荷中的ICMP头 usID = pInnerIcmpHdr->id; //报文ID usSquNo = pInnerIcmpHdr->seq; //序列号 } else { return false; } //检查ID和序列号以确定收到期待数据报 if( usID != ( USHORT )GetCurrentProcessId() || usSquNo != DecodeResult.usSeqNo ) { return false; } //记录IP地址并计算往返时间 DecodeResult.dwIPaddr.s_addr = pIpHdr->sourceIP; DecodeResult.dwRoundTripTime = GetTickCount() - DecodeResult.dwRoundTripTime; //处理正确收到的ICMP数据报 if ( pIcmpHdr->type == ICMP_ECHO_REPLY || pIcmpHdr->type == ICMP_TIMEOUT ) { //输出往返时间信息 if(DecodeResult.dwRoundTripTime) cout<<" "<<DecodeResult.dwRoundTripTime<<"ms"<<flush; else cout<<" "<<"<1ms"<<flush; } return true; } void main() { //初始化Windows sockets网络环境 WSADATA wsa; WSAStartup( MAKEWORD(2,2), &wsa ); char IpAddress[255]; cout<<"请输入一个IP地址或域名:"; cin>>IpAddress; //得到IP地址 u_long ulDestIP = inet_addr( IpAddress ); //转换不成功时按域名解析 if( ulDestIP == INADDR_NONE ) { hostent * pHostent = gethostbyname( IpAddress ); if( pHostent ) { ulDestIP = ( *( in_addr* )pHostent->h_addr).s_addr; } else { cout<<"输入的IP地址或域名无效!"<<endl; WSACleanup(); return; } } cout<<"Tracing roote to "<<IpAddress<<" with a maximum of 30 hops.\n"<<endl; //填充目的端socket地址 sockaddr_in destSockAddr; ZeroMemory( &destSockAddr, sizeof( sockaddr_in ) ); destSockAddr.sin_family = AF_INET; destSockAddr.sin_addr.s_addr = ulDestIP; //创建原始套接字 SOCKET sockRaw = WSASocket( AF_INET, SOCK_RAW, IPPROTO_ICMP, NULL, 0, WSA_FLAG_OVERLAPPED ); //超时时间 int iTimeout = 3000; //设置接收超时时间 setsockopt( sockRaw, SOL_SOCKET, SO_RCVTIMEO, (char *)&iTimeout, sizeof( iTimeout ) ); //设置发送超时时间 setsockopt(sockRaw,SOL_SOCKET,SO_SNDTIMEO,(char *)&iTimeout,sizeof(iTimeout)); //构造ICMP回显请求消息,并以TTL递增的顺序发送报文 //ICMP类型字段 const BYTE ICMP_ECHO_REQUEST = 8; //请求回显 const BYTE ICMP_ECHO_REPLY = 0; //回显应答 const BYTE ICMP_TIMEOUT = 11; //传输超时 //其他常量定义 const int DEF_ICMP_DATA_SIZE = 32; //ICMP报文默认数据字段长度 const int MAX_ICMP_PACKET_SIZE = 1024; //ICMP报文最大长度(包括报头) const DWORD DEF_ICMP_TIMEOUT = 3000; //回显应答超时时间 const int DEF_MAX_HOP = 30; //最大跳站数 //填充ICMP报文中每次发送时不变的字段 char IcmpSendBuf[ sizeof( ICMP_HEADER ) + DEF_ICMP_DATA_SIZE ];//发送缓冲区 memset( IcmpSendBuf, 0, sizeof( IcmpSendBuf ) ); //初始化发送缓冲区 char IcmpRecvBuf[ MAX_ICMP_PACKET_SIZE ]; //接收缓冲区 memset( IcmpRecvBuf, 0, sizeof( IcmpRecvBuf ) ); //初始化接收缓冲区 ICMP_HEADER * pIcmpHeader = ( ICMP_HEADER* )IcmpSendBuf; pIcmpHeader->type = ICMP_ECHO_REQUEST; //类型为请求回显 pIcmpHeader->code = 0; //代码字段为0 pIcmpHeader->id = (USHORT)GetCurrentProcessId(); //ID字段为当前进程号 memset( IcmpSendBuf + sizeof( ICMP_HEADER ), 'E', DEF_ICMP_DATA_SIZE );//数据字段 USHORT usSeqNo = 0; //ICMP报文序列号 int iTTL = 1; //TTL初始值为1 BOOL bReachDestHost = FALSE; //循环退出标志 int iMaxHot = DEF_MAX_HOP; //循环的最大次数 DECODE_RESULT DecodeResult; //传递给报文解码函数的结构化参数 while( !bReachDestHost && iMaxHot-- ) { //设置IP报头的TTL字段 setsockopt( sockRaw, IPPROTO_IP, IP_TTL, (char *)&iTTL, sizeof(iTTL) ); cout<<iTTL<<flush; //输出当前序号,flush表示将缓冲区的内容马上送进cout,把输出缓冲区刷新 //填充ICMP报文中每次发送变化的字段 ((ICMP_HEADER *)IcmpSendBuf)->cksum = 0; //校验和先置为0 ((ICMP_HEADER *)IcmpSendBuf)->seq = htons(usSeqNo++); //填充序列号 ((ICMP_HEADER *)IcmpSendBuf)->cksum = checksum( ( USHORT * )IcmpSendBuf, sizeof( ICMP_HEADER ) + DEF_ICMP_DATA_SIZE ); //计算校验和 //记录序列号和当前时间 DecodeResult.usSeqNo = ( ( ICMP_HEADER* )IcmpSendBuf )->seq; //当前序号 DecodeResult.dwRoundTripTime = GetTickCount(); //当前时间 //发送TCP回显请求信息 sendto( sockRaw, IcmpSendBuf, sizeof(IcmpSendBuf), 0, (sockaddr*)&destSockAddr, sizeof(destSockAddr) ); //接收ICMP差错报文并进行解析处理 sockaddr_in from; //对端socket地址 int iFromLen = sizeof(from);//地址结构大小 int iReadDataLen; //接收数据长度 while(1) { //接收数据 iReadDataLen = recvfrom( sockRaw, IcmpRecvBuf, MAX_ICMP_PACKET_SIZE, 0, (sockaddr*)&from, &iFromLen ); if( iReadDataLen != SOCKET_ERROR )//有数据到达 { //对数据包进行解码 if(DecodeIcmpResponse( IcmpRecvBuf, iReadDataLen, DecodeResult, ICMP_ECHO_REPLY, ICMP_TIMEOUT ) ) { //到达目的地,退出循环 if( DecodeResult.dwIPaddr.s_addr == destSockAddr.sin_addr.s_addr ) bReachDestHost = true; //输出IP地址 cout<<'\t'<<inet_ntoa( DecodeResult.dwIPaddr )<<endl; break; } } else if( WSAGetLastError() == WSAETIMEDOUT ) //接收超时,输出*号 { cout<<" *"<<'\t'<<"Request timed out."<<endl; break; } else { break; } } iTTL++; //递增TTL值 } }
初学者的一点疑问,汇编语言计算两个输入数字的和并输出
assume cs:code,ds:data data segment buf1 db 20 db ? db 20 dup(?) buf2 db 20 db ? db 20 dup(?) sh1 db "please input tow numbers$" sh2 db 0ah,0dh,"The first number is $" sh3 db 0ah,0dh,"The second number is $" sh4 db 0ah,0dh,"The result of them is $" data ends code segment start: mov ax,data mov ds,ax show1: mov dx,sh1 mov ax,09h int 21h mov dx,sh2 int 21h buf1: lea dx,buf1 mov ax,0ah int 21h buf2: lea dx,buf2 mov ax,0ah int 21h add1: ;====想法:将第一个数字送入buf1中,将第二个数字送入buf2中 ;====比较两个数字的长度,以长度较大的数字的字节数作为循环次数,进行加法循环 ;====将每次循环的结果依次压栈,在循环结束后,依次出栈,显示到屏幕上 目前我只想到了这些,但是再往下就不会写了... 还请大神多多指教 ``` ```
这个猜数游戏中怎么将for循环的语句换成while循环语句
``` ```import java.util.Random; import java.util.Scanner; public class Chenwei_Guessnumebr{ static int w = 8; /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Random ran = new Random(); int num = ran.nextInt(100)+1; for(;;){ System.out.println("1.开始猜数"); System.out.println("2.游戏参数设置"); System.out.println("9.退出"); Scanner sc=new Scanner(System.in); String choo =sc.next(); if (!choo.equals("1")&&!choo.equals("2")&&!choo.equals("9")){ //if条件语句 三种条件,限制情况. System.out.println("非法数据"); } else { if (choo.equals("1")) { int t = 1; for (t=1;t<w;t=t+1) { System.out.println("请输入你想猜测的数字"); Scanner scs=new Scanner(System.in); int n = scs.nextInt(); if (n>num) { System.out.println("猜的数字大了."); } else if (n<num) { System.out.println("猜的数字小了."); } else{ System.out.println("恭喜你猜对了,你的战斗力是x%" ); // ☆“缺一个计算战斗力的式子” break; } } if(t > w) //t(猜测次数)超过了w(设置的总次数) { System.out.println("超过次数,尚需努力"); break; } else { break; } } } if(choo.equals("2")){ System.out.println("请选择难度:"); System.out.println("1.简单"); System.out.println("2.一般"); System.out.println("3.困难"); Scanner scs = new Scanner(System.in); int u = scs.nextInt(); if (u==1) { w=8; //次数为8(简单) } else if (u==2) { w=6; //次数为6(一般) } else { w=4; //次数为4(困难) } } else { break; } } } } ``` ``` 同时缺少一个计算战斗力的式子 就是在答对的时候 “恭喜你猜对了,你的战斗力是x%"(x=1-n/8,n是猜中时的次数-1)
使用RNN识别语音数据的反向传播问题
在使用RNN处理声音的实验中,我将声音数据以1000为单位划分成了多个样本,每一次的rnn循环读取样本中的一个数据,因此前向传播的次数应该是1000次。在所有的前向传播结束之后应该会得到1000个结果,对1000个结果取平均后(做mean pooling处理),经过sigmod函数得到分类的预测结果,此时和正确结果相见可以得到此次训练的误差,但得到误差之后我怎么返回进行反向传播对我原来的权值进行更新呢?是每一层都根据正确的分类结果(0或1)计算一次误差,还是同时使用相同的误差来进行计算呢?
C++新手上路,编写的代码不能如预想帮运行,是随机数生成出错还是算法出错?
该题目中我编写的代码运行后前几个结果随机,后面的结果全部相同,是随机数的生成出错了吗? 同时我的同学编写的程序结果在160左右,而我的总是1000000+,为什么?是数学逻辑错了吗? 还有重复的结果总是1或者15,为什么? #include<stdio.h> #include<iostream> #include<time.h> #include<stdlib.h> using namespace std; int main() { /*题目,在一个16*16的坐标中A,B两点同时出发, 每一次移动只能平移一个单位向量,单A,B相遇时 结束,输出移动的步数。并重复上述操作10000次, 计算平均步数。*/ cout << "测试开始" << endl; int x, y, n, m,i,z; float Z = 0; x = y = 15; z = 0; i = 0; n = m = 0; while (true) { srand((unsigned)time(NULL)); switch (rand() % 4 + 1) { case 1:y = (y + 17) % 16;break;//(x,y)上移 case 2:x = (x + 17) % 16;break;//(x,y)右移 case 3:y = (y + 15) % 16;break;//(x,y)下移 case 4:x = (x + 15) % 16;;break;//(x,y)左移 } switch (rand() % 4 + 1) { case 1:m = (m + 17) % 16;break;//(n,m)上移 case 2:n = (n + 17) % 16;break;//(n,m)右移 case 3:m = (m + 15) % 16;;break;//(n,m)下移 case 4:n = (n + 15) % 16;;break;//(n,m)左移 } i = i + 1; //计算移动步数 if (x == n && y == m) //相遇 { cout << i << " ";//输出步数 z++; //计算运行次数 Z = Z + i; //计算总步数 i = 0; //重启 x = y = 15; //重启 n = m = 0; //重启 } if (z == 10000) //计算平均值 { cout << "平均值为" << Z / z << endl; break; //结束循环 } } }
用R语言nls函数做非线性模型参数估计时出现的问题,急求
拟使用模型公式为Y=exp(a*x^b),以下是脚本及计算结果: > cl<-data.frame( + X=c(95.3, 87.18, 44.94, 26.36, 18.12, 84.68, 37.24, 33.04, 23.46, 9.72, 97.92, 71.44, 44.52, 24.44, 15.26), + Y=c(521.5, 689.78, 1284.71, 2018.8, 2560.46, 524.91, 989.05, 1646.32, 2239.65, 2972.96, 478.54, 875.52, 1432.5, 2144.74, 2629.2) + ) > nls.sol<-nls(Y~exp(a*X^b), data=cl) Error in nls(Y ~ exp(a * X^b), data = cl) : 循环次数超过了50这个最大值 此外: Warning message: In nls(Y ~ exp(a * X^b), data = cl) : No starting values specified for some parameters. Initializing ‘a’, ‘b’ to '1.'. Consider specifying 'start' or using a selfStart model 问题:循环次数超过了50这个是因为什么?是否影响参数的估计?另外start参数里a,b起始值是如何设定的
R语言关于根号二的平方的误差问题
在Rstudio中,我发现一个数的平方根再平方,得出的结果和原数有误差,如 ``` > sqrt(2)^2-2 [1] 4.440892e-16)^2-2 ``` 如果把这个当作计算机的小数点取舍,那么我运行第二段程序发现这个 ``` > for(i in 1:10) print(sqrt(i)^2-i) [1] 0 [1] 4.440892e-16 [1] -4.440892e-16 [1] 0 [1] 8.881784e-16 [1] -8.881784e-16 [1] 8.881784e-16 [1] 1.776357e-15 [1] 0 [1] 1.776357e-15 ``` 其中误差等于零的是完全平方数,然后剩下的数的误差有一样的,还有跳跃较大的,还甚至有负数的??搞不懂了。 然后还有这种 ``` > for(i in 1:10) print(1+sqrt(i)^2-(i+1)) [1] 0 [1] 4.440892e-16 [1] -4.440892e-16 [1] 0 [1] 8.881784e-16 [1] -8.881784e-16 [1] 0 [1] 1.776357e-15 [1] 0 [1] 1.776357e-15 > for(i in 1:10) print(2+sqrt(i)^2-(i+2)) [1] 0 [1] 0 [1] 0 [1] 0 [1] 8.881784e-16 [1] -8.881784e-16 [1] 0 [1] 1.776357e-15 [1] 0 [1] 1.776357e-15 ``` 在根号i前后进行运算,对于这个2和(i+2),当我取8与(i+8)时,这十组运算的误差就都消失了 ``` > for(i in 1:10) print(7+sqrt(i)^2-(i+7)) [1] 0 [1] 0 [1] 0 [1] 0 [1] 0 [1] 0 [1] 0 [1] 1.776357e-15 [1] 0 [1] 0 > for(i in 1:10) print(8+sqrt(i)^2-(i+8)) [1] 0 [1] 0 [1] 0 [1] 0 [1] 0 [1] 0 [1] 0 [1] 0 [1] 0 [1] 0 ``` 最后发现,对于任意一个循环的次数,比如上面的10,都有一个小于它的数可以使这sqrt(i)^2-i的误差降到零,经过试验,循环1:50时,32+sqrt(i)^2-(i+32)就都是零了,同时每次换那个前后加减的数,都会使误差变动很大,求大佬讲解这个原理。
Alsrobot自带记忆大考验实验编程不停报错
请教下各位大佬,我在做奥森机器人的那个记忆大考验实验的时候用光盘给的程序一直报错,加上IRemote库函数,改了tone()函数也不行,改了好久快炸了,求大佬帮帮忙。 报的错误:collect2.exe: error: ld returned 1 exit status 程序: #include <IRremote.h> void newtone(byte tonePin, int frequency, int duration) { int period = 1000000L / frequency; int pulse = period / 2; for (long i = 0; i < duration * 1000L; i += period) { digitalWrite(tonePin, HIGH); delayMicroseconds(pulse); digitalWrite(tonePin, LOW); delayMicroseconds(pulse); } } const unsigned long RC_CODE[10] = {0, 0xFF30CF, 0xFF18E7, 0xFF7A85, 0xFF10EF, 0xFF38C7, 0xFF5AA5, 0xFF42BD, 0xFF4AB5, 0xFF52AD }; // 遥控器1~9的编码表 const int PINS[10] = {0, 2, 3, 4, 5, 6, 7, 8, 9, 10}; // 9盏灯,下标0不使用 const int BUZ = 13; const int RECV_PIN = 12; const int N = 3; // N 为游戏的难度,即需要回忆的次数 int randomNums[30]; // randomNums 中存放了 N 个由单片机生成的随机数 IRrecv irrecv(RECV_PIN); decode_results results; // 红外接收需要的两个对象 int anwser[30]; int inc; // anwser 中存放了 inc 个玩家的回答 bool isRight; // 最后判断玩家是否回答正确 unsigned long beginTime; // 用来计算超时时间 void setup() { irrecv.enableIRIn(); // 初始化红外接收 for(int i = 1; i <= 9; i++) pinMode(PINS[i], OUTPUT); pinMode(BUZ, OUTPUT); randomSeed(analogRead(A0)); // 随机种子 } void loop() { // 生成随机数 for(int i = 0; i < N; i++) randomNums[i] = random(1, 10); // 范围 1~9 // 使用 LED 展示随机数,难度为 N for(int i = 0; i < N; i++) { // randomNums[i] 表示第 i 次亮第几盏灯 // PINS[n] 表示第 n 盏灯对应的物理针脚号 digitalWrite(PINS[randomNums[i]], HIGH); delay(1000); digitalWrite(PINS[randomNums[i]], LOW); delay(1000); } // 全亮全灭 ,提示游戏开始,你也可以使用蜂鸣器 for(int i = 1; i <= 9; i++) { digitalWrite(PINS[i], HIGH); } delay(2000); for(int i = 1; i <= 9; i++) { digitalWrite(PINS[i], LOW); } // 开始接收玩家的回答 inc = 0; // 用于记录玩家答案 anwser 的下标 beginTime = millis(); // 记录玩家回答的时间 while(1) { if(irrecv.decode(&results)) // 红外接收遥控器的值,结果位于 results.value { // 将玩家的输入,依次与 RC_CODE[i] 做比较 // RC_CODE[i] 表示遥控器的数字 i 所对应的编码 for(int i = 1; i <=9; i++) { if(results.value == RC_CODE[i]) // 如果玩家按下的数字是 i { // 第 i 盏灯闪烁 digitalWrite(PINS[i], HIGH); delay(50); digitalWrite(PINS[i], LOW); anwser[inc++] = i; // 记录玩家的答案 break; } } irrecv.resume(); // 接收玩家的下一个回答 // 如果玩家输入的数量与单片机的数量相同,说明玩家已经回答完毕 // 退出循环,准备判断 if(inc == N) break; } // 另外一种可能,玩家5秒内都未回答完毕(inc==N),直接退出循环 // 这种情况下,回答一定是错误的 if(millis() - beginTime > 5000) break; } // 判断玩家的回答是否正确 isRight = true; for(int i = 0; i < N; i++) // 逐项比较 anwser 和 randomNums if(anwser[i] != randomNums[i]) // 如果发现有任何一项不相同 { isRight = false; // 标记回答错误 break; } // 根据判断结果 , 使用蜂鸣器提示回答正确与否 if(isRight) { newtone(BUZ, 2000, 200); delay(200); newtone(BUZ, 2500, 200); delay(200); newtone(BUZ, 3000, 200); delay(200); } else { newtone(BUZ, 1000, 600); delay(600); } noTone(BUZ); // 关闭蜂鸣器,开始下一轮游戏 }
汇编语言实现学生成绩管理
设计实现一个学生成绩查询的程序。 1、实验背景 在以BUF为首址的字节数据存储区中,存放着n个学生的课程成绩表(百分制),每个学生的相关信息包括:姓名(占10个字节,结束符为数值0),语文成绩(1个字节),数学成绩(1个字节),英语成绩(1个字节),平均成绩(1个字节)。 例如: N EQU 1000 BUF DB ‘zhangsan’,0,0 ;学生姓名,不足10个字节的部分用0填充 DB 100, 85, 80,? ; 平均成绩还未计算 DB ‘lisi’,6 DUP(0) DB 80, 100, 70,? DB N-3 DUP( ‘TempValue’,0,80,90,95,?) ;除了3个已经具体定义了学生信息的成绩表以外,其他学生的信息暂时假定为一样的。 DB ‘wangwu’,0,0,0,0 DB 85, 85, 100, ? 2、功能一:提示并输入学生姓名 (1)使用9号DOS系统功能调用,提示用户输入学生姓名。 (2)使用10号DOS系统功能调用,输入学生姓名。输入的姓名字符串放在以in_name为首址的存储区中。 (3)若只是输入了回车,则回到“(1)”处重新提示与输入;若仅仅输入字符q,则程序退出,否则,准备进入下一步处理。 3、功能二:以学生姓名查询有无该学生 (1)使用循环程序结构,在成绩表中查找该学生。 (2)若未找到,就提示用户该学生不存在,并回到“功能一(1)”的位置,提示并重新输入姓名。 (3)若找到,则将该学生课程成绩表的起始偏移地址保存到POIN字变量中。 提示:字符串比较时,当采用输入串的长度作为循环次数时,若因循环次数减为0而终止循环,则还要去判断成绩表中名字串的下一个字符是否是结束符0,若是,才能确定找到了。 4、功能三:计算所有学生的平均成绩 使用算数运算相关指令计算并保存每一个学生的平均成绩。 平均成绩计算公式:(A*2+B+C/2)/3.5,即将语文成绩A乘以权重2、英语成绩C除以权重2后,与数学成绩B一起求和,再计算该生的平均成绩。要求避免溢出。 提示:使用循环程序结构,注意寻址方式的灵活使用。把小数3.5转换成分数后再运算避免使用浮点数指令。 5、功能四:将功能二查到的学生的平均成绩进行等级判断,并显示判断结果。 (1)平均成绩等级显示方式:若平均成绩大于等于90分,显示“A”;大于等于80分,显示“B”;大于等于70分,显示“C”;大于等于60分,显示“D”;小于60分,显示“F”。 提示:使用分支程序结构,采用2号DOS系统功能调用显示结果。 (2)使用转移指令回到“功能一(1)”处(提示并输入姓名)。 6、思考与选做功能 (1)对输入的姓名进行合法性检查,比如:是否存在大小写字母之外的字符,等等;若存在非法的输入情形,则提示之后重新输入。 (2)对BUF中预先定义的课程成绩表中的所有成绩项进行合法性检查,判断是否符合实际(如超过100分等),不符合则提示并退出程序。预先定义的学生姓名中,如果有重名如何处理? (3)除了显示平均成绩的等级外,还将平均成绩同时显示。 (4)由于有些课程体系中,成绩的满分可能会达到300分,此时,成绩项的定义必须采用字类型,那么,如何改造程序呢?采用数据结构来定义BUF存储区是否会更好?
python单线程省时间是固定的吗,时间是根据什么有关系
python 的多线程一定比单线程省时间 而且是固定数值8s吗![图片说明](https://img-ask.csdn.net/upload/201901/02/1546399795_312136.jpg)![图片说明](https://img-ask.csdn.net/upload/201901/02/1546399805_563371.jpg) 如图二个单线程总时间是18s 执行的多线程时间花费10s(控制台20-10) 固定数值是8 我换了方法的循环次数 计算完还是省8s时间 这是固定的吗
最大子列和问题的算法复杂度分析,不懂是怎么求出来的
``` #include<iostream> #include<stdio.h> using namespace std; int MaxSubsequenceSum(int a[],int n); int main(){ //int a[6] = {-2, 11, -4, 13, -5, -2}; int a[8] = {4, -3, 5, -2, -1, 2, 6, -2}; printf("%d\n",MaxSubsequenceSum(a,8)); } int MaxSubsequenceSum(int a[],int n){ int ThisSum, MaxSum; MaxSum = 0; for(int i = 0; i < n; i++){ for(int j = i; j < n; j++){ ThisSum = 0; for(int k = i; k <= j; k++){ ThisSum += a[k]; } if(ThisSum > MaxSum){ MaxSum = ThisSum; } } } return MaxSum; } ``` 这是一种O(n^3)的解法,说实话,我是写不来这样高时间复杂度的算法,这个算法重复做了很多的无用的计算,强行将算法复杂化,经过简单的分析,直接可以求 ThisSum += a[k] 语句的次数,就能够得出它的时间复杂度: ![图片说明](http://qiniuyun.mao2234.cn/tuchuang/20190412/EGkyeUbHpIGU.png) 请问经过简单分析,是怎么分析的。 我假设i=1,经过运算得出 最内层循环执行了(1+n)n/2 次,i=2时 最内层循环执行了(2+n)(n-1)/2次,i=3时,最内层循环执行了(3+n)(n-2)/2次…… 因为 i的取值范围是0到N,所以 我尝试把上面的加起来,接下来就不会了,请求赐教,或者告诉我最后图片上的那个是怎么对到出来的
小学生计算机辅助教学系统 c语言
#include<time.h> #include<stdlib.h> #include<stdio.h> int Makenumber(void); int Countnumber(void); char Op(void); int a,b,t; float result1,result2; int main() { char reply; srand(time(NULL)); do{ int i=1,counter=0; do{ Makenumber(); Op(); Countnumber(); i++; //循环变量// if(result1==result2) { printf("right!next!\n"); counter++; //答对的次数// } else printf("wrong!\n"); }while(i<=10); printf("you get %d marks!\n",counter*10); printf("The correct answer rate was %d%%.\n",counter*10); printf("\n"); printf("Do you want to continue(Y/N or y/n)?\n"); scanf(" %c",&reply); //%c前面空一个格// }while(reply=='y'||reply=='Y'); return 0; } int Makenumber(void) { a=rand()%10+1; b=rand()%10+1; return 0; } char Op(void) { t=rand()%4+1; switch(t) { case 1: result1=a+b; break; case 2: result1=a-b; break; case 3: result1=a*b; break; case 4: result1=a/b; break; } return result1; } int Countnumber(void) { switch(t) { case 1: printf("please compute%d+%d=",a,b); scanf("%f",&result2); break; case 2: printf("please compute%d-%d=",a,b); scanf("%f",&result2); break; case 3: printf("please compute%d*%d=",a,b); scanf("%f",&result2); break; case 4: printf("please compute%d/%d=",a,b); scanf("%f",&result2); break; } return result2; ![图片说明](https://img-ask.csdn.net/upload/201706/12/1497266857_242259.png) }
汇编:在代码中使用数据,见代码
**编程计算以下8个数据的和,结果存放在ax寄存器中** 0123h, 0456h, 0789h, 0abch, 0defh, 0fedh, 0cbah, 0987h 结果为: 4BDB P123, 《汇编语言(第2版)》,王爽 8个数据定义在代码段cs,我的想法是将cs赋值给ds,然后使用bx做偏移地址"add ax, ds:[bx]",但是书上是直接使用"add ax, cs:[bx]",运行之后导致结果不相同。 【1.运行结果是:ax = 4BD8】 ``` assume cs:code ;代码段 code segment ;定义8个字型数据 dw 0123h, 0456h, 0789h, 0abch, 0defh, 0fedh, 0cbah, 0987h ;设置偏移地址 mov bx, 0 ;设置循环次数 mov cx, 8 ;将ax寄存器清零 mov ax, 0 s: add ax, cs:[bx] add bx, 2 loop s ;正常结束程序 mov ax, 4c00h int 21h code ends end ``` 【2.运行结果是:ax =5EAE】 ``` assume cs:code ;代码段 code segment ;定义8个字型数据 dw 0123h, 0456h, 0789h, 0abch, 0defh, 0fedh, 0cbah, 0987h ;将代码段设置为数据段 mov ax, cs mov ds, ax ;设置偏移地址 mov bx, 0 ;设置循环次数 mov cx, 8 ;将ax寄存器清零 mov ax, 0 s: add ax, ds:[bx] add bx, 2 loop s ;正常结束程序 mov ax, 4c00h int 21h code ends end ```
水仙花数代码如何减短运行时间
水仙花数是指一个N位正整数(N>=3),它的每个位上的数字的N次幂之和等于它本身。例 如:153 = 13 + 53+ 33。 本题要求编写程序,计算所有N位水仙花数。 输入格式: 输入在一行中给出一个正整数N(3<=N<=7)。 输出格式: 按递增顺序输出所有N位水仙花数,每个数字占一行。 输入样例:3 输出样例:153 370 371 407 我的代码运行起来超时;我知道可能是n=7时循环次数太多造成的.有什么办法解决呢 # include<stdio.h> # include<math.h> int main() { int n,i,x; scanf("%d", &n); x=pow(10,n-1); int y=pow(10,n); int sum,a,z,flag; for(i=x;i<y;i++) { z=x; sum=0; flag=i; while(z>0) { a=flag/z; sum+=pow(a,n); flag=flag%z; z/=10; } if(sum==i) printf("%d\n", i); } return 0; }
怎么把cpu的性能曲线改成正弦波
#include <iostream> #include <cmath> #include <ctime> #include <windows.h> 5 6 using namespace std; 7 8 //得到循环0xFFFFFFFF次用的秒数 9 unsigned int test() 10 { 11 unsigned int c = 0xFFFFFFFF; 12 13 time_t t1, t2; 14 time(&t1); 15 16 for(unsigned int i = 0; i < c; i++) 17 ; 18 time(&t2); 19 return (unsigned int)(t2 -t1); 20 21 } 22 23 24 #define T 20000 //周期时间 20秒 25 #define C 100 //采样点时间间隔 26 #define PI 3.1415 //PI 27 const unsigned int count = 0xFFFFFFFF / (test() *1000); //采样间隔可以执行的循环数目 28 const unsigned int N = T/C; //周期内采样点数目 29 unsigned int v[N] = { 0 }; //所有采样点连续执行循环数 30 unsigned int mt[N] = { 0 }; //所有采样点休眠毫秒数 31 32 int main() 33 { 34 //计算循环次数和休眠时间 35 for(int i = 0; i < N; i++) 36 { 37 double x = 2 * PI * i / N; 38 double r = (sin(x) + 1) / 2; 39 40 mt[i] = C - r * C; 41 v[i] = r * C * count; 42 } 43 for(;;) 44 { 45 for(int i = 0; i < N; i++) 46 { 47 for(int j = 0; j < v[i]; j++) 48 ; 49 Sleep(mt[i]); 50 } 51 } 52 } 这段程序如何编译
有关VC++运行SGA程序出错,自动关闭程序的问题。
大家好,在用VC++(绿色版)运行SGA程序的时候,显示出现了“一个不能解决的问题”,即关闭。请大家帮帮忙,让程序能顺利运行~第一次进论坛,谢谢大家啦! 程序如下:(主要是后面的适应度函数) (目标是对工序排列,使工人总的工资成本最低。每道工序时间不同,工人工资也不同) #include <stdio.h> #include<stdlib.h> #include<time.h> #include<math.h> #include<conio.h> #define N 5 #define M 2 //5个工序,2个工人 #define POPSIZE 500 int u[N]={1,2,1,2,1}; //不同工序持续时间 int c[M]={2,5}; //工人每小时工作成本 int T[M]={3,2}; //每个工人参与工序的总次数 int J[M][N]; //记录工人在某个工序参加与否 int a[M][N]={{1,2,3},{3,4,5}}; //每个工人参加的工序集 int popsize ; //种群大小 int maxgeneration; //最大世代数 double pcross = 0.0; //交叉率 double pmutation = 0.0; //变异率 double sumfitness; //种群个体适应值累计 struct individual //定义染色体个体结构体 { int chrom[N]; //定义染色体二进制表达形式 double fitness; //染色体的适应值 }; int generation; //当前执行的世代数 int best_index; //本世代最好的染色体索引序号 struct individual bestindividual; //最佳染色体个体 struct individual currentbest; //当前最好的染色体个体 currentbest int bestgeneration; //当前最好染色体个体产生的代数 struct individual oldpop[POPSIZE];//种群数组 struct individual newpop[POPSIZE];//新种群数组 /* 随机数发生器使用的静态变量 */ static double oldrand[55]; static int jrand; static double rndx2; static int rndcalcflag; //函数声明 void printline(FILE *); void initialoldpop(FILE *ffp); //初始化当代种群 void generatenextpop(FILE *ffp); //产生下一代种群 void evaluateoldpop(); //评价种群 void calculateobjectfitness(); //计算种群适应度 void findbestindividual(); //寻找最好的染色体个体 int select(); //选择操作 //将p中移除掉q中位置在j1,j2之间的元素,其余元素前移,返回剩下元素的数量 int searchanddelete(int *p,int* q,int j1,int j2); void crossover(int *,int *,int *,int *,FILE *ffp); //交叉操作 void mutation(int *); //变异操作 void input(); //输入接口 void outputtextreport(FILE *ffp); //每代输出文字报告 void report(FILE *ffp); //输出最终结果报告 //以下为一些随机数相关函数 void advance_random(); int flip(double);int rnd(int, int); void randomize(); double randomnormaldeviate(); float randomperc();float rndreal(float,float); void warmup_random(float); void main() //主函数 (函数主体开始) { int i; FILE *fp; //指针文件 //打开文本文件 if((fp= fopen("Result.txt","w+"))==NULL) { printf("Can not open file!\n"); } fprintf(fp,"本程序为使用基本SGA求解\n"); generation=0; //初始化generation当前执行的代 input(); //初始化种群大小、交叉率、变异率 randomize(); // 初始化随机数发生器 initialoldpop(fp); //产生初始化种群 evaluateoldpop(); while(generation<maxgeneration) //小于最大世代数,执行循环体 { generation++; generatenextpop(fp); //生成子代种群(A.选择; B.交叉; C.变异) for(i = 0 ; i < popsize ; i++) { oldpop[i]=newpop[i]; } evaluateoldpop(); //评价新生子代种群 outputtextreport(fp); //输出当前子代种群统计报告 } report(fp);//输出最终报告 fclose(fp); //关闭fp指向的文件句柄,防止句柄泄露 printf("计算结果已输出到Result.txt文件中。"); getch(); } void printline(FILE *ffp) { fprintf(ffp,"\n*************************************************************\n"); } void initialoldpop(FILE *ffp) //种群初始化,对种群中每条染色体,生成1-5的不重复序列 { int i,j,p,q,r; int l=0; int a[N]; srand( (unsigned)time( NULL ) ); for (i=0;i<popsize; i++) { for(j=0;j<N;j++) a[j]=j; //对oldpop[i]染色体生成随机序列 p=N; q=0; while(p> 0) { r=rand(); r%=p; oldpop[i].chrom[l]=a[r]; a[r]=a[p-1]; // 把后一个拷贝到刚生成的位置 q++; p--; } } } void generatenextpop(FILE *ffp) //生成下一代 { int mate1,mate2,j=0; do{ //挑选交叉配对 mate1=select(); mate2=select(); crossover(oldpop[mate1].chrom,oldpop[mate2].chrom,newpop[j].chrom,newpop[j+1].chrom,ffp); mutation(newpop[j].chrom); mutation(newpop[j+1].chrom); j=j+2; } while(j<(popsize-1)); } void evaluateoldpop() //评价种群 { calculateobjectfitness(); //计算种群个体的适应度 findbestindividual(); //找到最好和最差的染色体个体 } void calculateobjectfitness() //计算染色体个体适应值 { int i,j,k,l,r,x; int p=0; int temp=0; int X[M]; for(i=0;i<popsize;i++) { oldpop[i].fitness=0.0; for(l=0;l<N;l++) { r=oldpop[i].chrom[l]; temp=u[r]; u[r]=u[l]; u[l]=temp; } for(j=0;j<M;j++) { for(k=0;k<N;k++) for(l=0;l<N;l++) { if(a[j][k]==oldpop[i].chrom[l]) J[j][l]=1; else J[j][l]=0; //记录各个工人在随机情景序列中的参与位置 } while(J[j][p]!=1) { p++; } x=1; X[j]=u[p]; while(x<T[j]) { p++; X[j]+=u[p]; if(J[j][p]==1) x++; } } for(j=0;j<M;j++) oldpop[i].fitness+=X[j]*c[j]; } } void findbestindividual( ) //求最佳个体 { int i; sumfitness=0.0; bestindividual=oldpop[0]; best_index=0; sumfitness+=oldpop[0].fitness; currentbest.fitness=oldpop[0].fitness; for(generation=0;generation<maxgeneration;generation++) for (i=1;i<popsize; i++) { if (oldpop[i].fitness<bestindividual.fitness) //依次比较,找出最佳个体 { bestindividual=oldpop[i]; //(选适应值最小的) best_index=i; } sumfitness+=oldpop[i].fitness; // 存放种群总体适应值 } if(bestindividual.fitness<currentbest.fitness)//第n代最好的,通过比较小于以往最好个体的话,暂时存放在currentbest { currentbest=bestindividual; bestgeneration=generation; } } 谢谢大家~
相见恨晚的超实用网站
搞学习 知乎:www.zhihu.com 简答题:http://www.jiandati.com/ 网易公开课:https://open.163.com/ted/ 网易云课堂:https://study.163.com/ 中国大学MOOC:www.icourse163.org 网易云课堂:study.163.com 哔哩哔哩弹幕网:www.bilibili.com 我要自学网:www.51zxw
花了20分钟,给女朋友们写了一个web版群聊程序
参考博客 [1]https://www.byteslounge.com/tutorials/java-ee-html5-websocket-example
爬虫福利二 之 妹子图网MM批量下载
爬虫福利一:27报网MM批量下载    点击 看了本文,相信大家对爬虫一定会产生强烈的兴趣,激励自己去学习爬虫,在这里提前祝:大家学有所成! 目标网站:妹子图网 环境:Python3.x 相关第三方模块:requests、beautifulsoup4 Re:各位在测试时只需要将代码里的变量 path 指定为你当前系统要保存的路径,使用 python xxx.py 或IDE运行即可。
字节跳动视频编解码面经
引言 本文主要是记录一下面试字节跳动的经历。 三四月份投了字节跳动的实习(图形图像岗位),然后hr打电话过来问了一下会不会opengl,c++,shador,当时只会一点c++,其他两个都不会,也就直接被拒了。 七月初内推了字节跳动的提前批,因为内推没有具体的岗位,hr又打电话问要不要考虑一下图形图像岗,我说实习投过这个岗位不合适,不会opengl和shador,然后hr就说秋招更看重基础。我当时
开源一个功能完整的SpringBoot项目框架
福利来了,给大家带来一个福利。 最近想了解一下有关Spring Boot的开源项目,看了很多开源的框架,大多是一些demo或者是一个未成形的项目,基本功能都不完整,尤其是用户权限和菜单方面几乎没有完整的。 想到我之前做的框架,里面通用模块有:用户模块,权限模块,菜单模块,功能模块也齐全了,每一个功能都是完整的。 打算把这个框架分享出来,供大家使用和学习。 为什么用框架? 框架可以学习整体
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过
Python——画一棵漂亮的樱花树(不同种樱花+玫瑰+圣诞树喔)
最近翻到一篇知乎,上面有不少用Python(大多是turtle库)绘制的树图,感觉很漂亮,我整理了一下,挑了一些我觉得不错的代码分享给大家(这些我都测试过,确实可以生成喔~) one 樱花树 动态生成樱花 效果图(这个是动态的): 实现代码 import turtle as T import random import time # 画樱花的躯干(60,t) def Tree(branch
深深的码丨Java HashMap 透析
HashMap 相关概念 HashTab、HashMap、TreeMap 均以键值对像是存储或操作数据元素。HashTab继承自Dictionary,HashMap、TreeMap继承自AbstractMap,三者均实现Map接口 **HashTab:**同步哈希表,不支持null键或值,因为同步导致性能影响,很少被使用 **HashMap:**应用较多的非同步哈希表,支持null键或值,是键值对...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 顺便拉下票,我在参加csdn博客之星竞选,欢迎投票支持,每个QQ或者微信每天都可以投5票,扫二维码即可,http://m234140.nofollow.ax.
Python 基础(一):入门必备知识
目录1 标识符2 关键字3 引号4 编码5 输入输出6 缩进7 多行8 注释9 数据类型10 运算符10.1 常用运算符10.2 运算符优先级 1 标识符 标识符是编程时使用的名字,用于给变量、函数、语句块等命名,Python 中标识符由字母、数字、下划线组成,不能以数字开头,区分大小写。 以下划线开头的标识符有特殊含义,单下划线开头的标识符,如:_xxx ,表示不能直接访问的类属性,需通过类提供
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 欢迎 改进 留言。 演示地点跳到演示地点 html代码如下`&lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;title&gt;music&lt;/title&gt; &lt;meta charset="utf-8"&gt
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。 1. for - else 什么?不是 if 和 else 才
数据库优化 - SQL优化
前面一篇文章从实例的角度进行数据库优化,通过配置一些参数让数据库性能达到最优。但是一些“不好”的SQL也会导致数据库查询变慢,影响业务流程。本文从SQL角度进行数据库优化,提升SQL运行效率。 判断问题SQL 判断SQL是否有问题时可以通过两个表象进行判断: 系统级别表象 CPU消耗严重 IO等待严重 页面响应时间过长
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 c/c++ 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7
通俗易懂地给女朋友讲:线程池的内部原理
餐厅的约会 餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”我楞了一下,心里想女朋友今天是怎么了,怎么突然问出这么专业的问题,但做为一个专业人士在女朋友面前也不能露怯啊,想了一下便说:“我先给你讲讲我前同事老王的故事吧!” 大龄程序员老王 老王是一个已经北漂十多年的程序员,岁数大了,加班加不动了,升迁也无望,于是拿着手里
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹
面试官:你连RESTful都不知道我怎么敢要你?
面试官:了解RESTful吗? 我:听说过。 面试官:那什么是RESTful? 我:就是用起来很规范,挺好的 面试官:是RESTful挺好的,还是自我感觉挺好的 我:都挺好的。 面试官:… 把门关上。 我:… 要干嘛?先关上再说。 面试官:我说出去把门关上。 我:what ?,夺门而去 文章目录01 前言02 RESTful的来源03 RESTful6大原则1. C-S架构2. 无状态3.统一的接
JDK12 Collectors.teeing 你真的需要了解一下
前言 在 Java 12 里面有个非常好用但在官方 JEP 没有公布的功能,因为它只是 Collector 中的一个小改动,它的作用是 merge 两个 collector 的结果,这句话显得很抽象,老规矩,我们先来看个图(这真是一个不和谐的图????): 管道改造经常会用这个小东西,通常我们叫它「三通」,它的主要作用就是将 downstream1 和 downstre...
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
致 Python 初学者
欢迎来到“Python进阶”专栏!来到这里的每一位同学,应该大致上学习了很多 Python 的基础知识,正在努力成长的过程中。在此期间,一定遇到了很多的困惑,对未来的学习方向感到迷茫。我非常理解你们所面临的处境。我从2007年开始接触 python 这门编程语言,从2009年开始单一使用 python 应对所有的开发工作,直至今天。回顾自己的学习过程,也曾经遇到过无数的困难,也曾经迷茫过、困惑过。开办这个专栏,正是为了帮助像我当年一样困惑的 Python 初学者走出困境、快速成长。希望我的经验能真正帮到你
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU...
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1...
程序员把地府后台管理系统做出来了,还有3.0版本!12月7号最新消息:已在开发中有github地址
第一幕:缘起 听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员…… 996程序员做的梦: 第一场:团队招募 为了应对地府管理危机,阎王打算找“人”开发一套地府后台管理系统,于是就在地府总经办群中发了项目需求。 话说还是中国电信的信号好,地府都是满格,哈哈!!! 经常会有外行朋友问:看某网站做的不错,功能也简单,你帮忙做一下? 而这次,面对这样的需求,这个程序员...
相关热词 c# plc s1200 c#里氏转换原则 c# 主界面 c# do loop c#存为组套 模板 c# 停掉协程 c# rgb 读取图片 c# 图片颜色调整 最快 c#多张图片上传 c#密封类与密封方法
立即提问