资源描述
C辅导,C语法,实数的格式输出与比较字符串穷举法,实数的格式化输出,doublea=1.23445输出a要求只有3位小数printf(“%.3f”,a);注意输出小数的时候,规定位数.nf,两个实数比较相等,判断一个实数是否等于另外一个不能直接用a=b精度问题浮点数如果比较是否相等的话,一般是通过(fabs(a-b)b,as2,函数值为大于0(正数)的数;若s1=s2,函数值等于0;若s1s2,函数值为小于0(负数)的数。,Strstrstrstr()函数搜索一个字符串在另一个字符串中的第一次出现。找到所搜索的字符串,则该函数返回第一次匹配的字符串的地址;如果未找到所搜索的字符串,则返回NULL,函数功能:格式化数据写入某字符串函数原型:intsprintf(char*buffer,constchar*format,argument);返值:字符串度(strlen)char*who=I;char*whom=CSDN;sprintf(s,%slove%s.,who,whom);/产:IloveCSDN.字符串写ssprintf(s,%10.3f,3.1415626);/产:3.142,字符串输入与输出,Charstr;scanf(“%s”,str);printf(“%s”,str);,题目,反转串我们把“cba”称为“abc”的反转串。下面的代码可以把buf中的字符反转。其中n表示buf中待反转的串的长度。请补充缺少的代码。,思路,Buf=“abcdefgh”;先把第一个和最后一个反转然后把bcdefg看成要反转的串在反转第一个和最后一个反转然后把cdef看成要反转的串在反转第一个和最后一个反转一直到结束,voidreverse_str(char*buf,intn)if(n=len)*q=_;q=s2;strcpy(s,s2);free(s2);,题目3,某抽奖活动的规则是:每位参与者在纸上写下一个8位数的号码。最后通过摇奖的办法随机产生一个8位数字。参与者写下的数字中最多有多少个连续位与开奖号码中的相同,则称为中了几个号。例如:小张写的数字是:12345678,而开奖号码是:42347856。则称小张中了3个号,因为其中最长的相同连续位是:“234”。如果小张写的是:87654321,则他只中了一个号。下面的代码根据传入的参数,返回中了几个号。其中:a表示被评价的号码,b表示摇号产生的数字。请填写缺少的代码。,中奖计算某抽奖活动的规则是:每位参与者在纸上写下一个8位数的号码。最后通过摇奖的办法随机产生一个8位数字。参与者写下的数字中最多有多少个连续位与开奖号码中的相同,则称为中了几个号。例如:小张写的数字是:12345678,而开奖号码是:42347856。则称小张中了3个号,因为其中最长的相同连续位是:“234”(不仅要相同,而且要位置相同)。如果小张写的是:87654321,则他只中了一个号。下面的代码根据传入的参数,返回中了几个号。其中:a表示被评价的号码,b表示摇号产生的数字。,intg(inta,intb)charsa=00000000;charsb=00000000;intn=0;inti,j;sprintf(sa,%8d,a);sprintf(sb,%8d,b);for(i=0;i8;i+)for(j=1;jn)_;sai+j=t;returnn;,穷举法,穷举法的基本思想是不重复、不遗漏地穷举所有可能情况,从中寻找满足条件的结果。穷举法充分利用了计算机处理的高速特性,避免复杂的逻辑推理过程,使问题简单化。使用穷举法的关键是要确定正确的穷举的范围。,例1:百钱百鸡问题。公鸡5文钱1只,母鸡3文钱1只,小鸡一文钱3只。100文钱如何卖100只鸡?条件分析设买x只公鸡,y只母鸡,z只小鸡,则有:x+y+z=1005x+3y+z/3=100且:x、y、z都是整数;0x20;0y33;0z99;z30。,基本算法思想,上述方程属于不定方程,解并不唯一,因此,可用穷举法对x、y、z的所有组合情况,测试满足条件的解。具体是:把x可能值020和y可能值033用二重循环来组合,每个x和y组合都可得到z值,即z=100-x-y,若x、y、z值使5x+3y+z/3=100成立,则该组x、y、z即为一组所求值。即:穷举范围:x:020,y:033,z:100-x-y判断式:z%3=0printf(Possiblesolutionstobuy100fowlswhith100wen:n);for(x=0;x=20;x+)for(y=0;y=33;y+)z=100-x-y;if(z%3=0,例2:打印出所有的“水仙花数”。所谓“水仙花数”是指一个三位正整数,其各位数字的立方和等于该数本身,例如:153=13+53+33。穷举范围:即把所有的三位正整数100999按题意一一进行判断。判断式:如果一个三位正整数n的百位、十位、个位上的数字分别为i、j、k,则判断式为:n=i3+j3+k3如何分解三位数n的百位、十位、个位:百位:i=n/100;十位:j=(n/10)%10;个位:k=n%10;,#includestdio.hmain()intn,i,j,k;for(n=100;n=999;n+)i=n/100;j=(n/10)%10;k=n%10;if(n=i*i*i+j*j*j+k*k*k)printf(%d=%d3+%d3+%d3n,n,i,j,k);,运行结果:15313+53+3337033+73+0337133+73+1340743+03+73,穷举要点,1.一一列举各种情况,不重复,不遗漏循环因此要注意循环的起止解决问题是是否存在和有多少可能的那些,找到具体规则找到能使程序优化的语句,以便缩小搜索范围,减少程序运行时间。,啤酒每罐2.3元,饮料每罐1.9元。小明买了若干啤酒和饮料,一共花了82.3元。我们还知道他买的啤酒比饮料的数量少,请你计算他买了几罐啤酒。注意:答案是一个整数。请通过浏览器提交答案。不要书写任何多余的内容(例如:写了饮料的数量,添加说明文字等),voidmain()for(inti=0;ij)continue;if(i*23+j*19=823)一种情况return0;,小明是个急性子,上小学的时候经常把老师写在黑板上的题目抄错了。有一次,老师出的题目是:36x495=?他却给抄成了:396x45=?但结果却很戏剧性,他的答案竟然是对的!因为36*495=396*45=17820类似这样的巧合情况可能还有很多,比如:27*594=297*54假设abcde代表19不同的5个数字(注意是各不相同的数字,且不含0)能满足形如:ab*cde=adb*ce这样的算式一共有多少种呢?,对a-e分别取1-9个数字,然后根据规则,看是否满足ab*cde=adb*ce,如果满足则复合条件,#includeintmain()inta,b,c,d,e;intsum=0;for(a=1;a10;a+)for(b=1;b10;b+)for(c=1;c10;c+)for(d=1;d10;d+)for(e=1;e10;e+)if(10*a+b)*(100*c+10*d+e)=(a*100+d*10+b)*(c*10+e),有一群海盗(不多于20人),在船上比拼酒量。过程如下:打开一瓶酒,所有在场的人平分喝下,有几个人倒下了。再打开一瓶酒平分,又有倒下的,再次重复.直到开了第4瓶酒,坐着的已经所剩无几,海盗船长也在其中。当第4瓶酒平分喝下后,大家都倒下了。等船长醒来,发现海盗船搁浅了。他在航海日志中写到:“.昨天,我正好喝了一瓶.奉劝大家,开船不喝酒,喝酒别开船.”请你根据这些信息,推断开始有多少人,每一轮喝下来还剩多少人。如果有多个可能的答案,请列出所有答案,每个答案占一行。格式是:人数,人数,.例如,有一种可能是:20,5,4,2,0,练习题目,福尔摩斯到某古堡探险,看到门上写着一个奇怪的算式:ABCDE*?=EDCBA他对华生说:“ABCDE应该代表不同的数字,问号也代表某个数字!”华生:“我猜也是!”于是,两人沉默了好久,还是没有算出合适的结果来。请你利用计算机的优势,找到破解的答案。把ABCDE所代表的数字写出来。答案写在“解答.txt”中,不要写在这里!,
展开阅读全文