C语言穷举法经典例题
编程思路:
如何找到该人,一定是“先假设该人是做好事者,然后到每句话中去测试看有几句是真话”。 “有三句是真话就确定是该人,否则换下一人再试”。
比如,先假定是A同学,让 thisman='A';
代入到四句话中
A说:thisman!=‘A’;
‘A’!=‘A’
假,值为0。
B说:thisman==‘C’;
这时,我们可以理出头绪,要用枚举法,一个人一个人地去试,四句话中有三句为真,该人即所求。
#include<stdio.h>
void main( )
{
char thisman;
int sa,sb,sc,sd,cond;
for (thisman='A'; thisman<='D'; thisman++)
printf("cocks=%d,hens=%d,chickens=%d\n",x,y,z);
}
}
优化
【讨论】 令z=100-x-y 只进行101×101= 10201 次运算(前者的1%)
继续优化
void main()
{ int x,y,z; for (x=0;x<=14;x++)
取x<=14,y<=25 只进行15×26= 390 次运 算
穷举法求解韩信点兵:方案1-goto
#include <stdio.h> void main() {
int x;
for (x=1; ;x++) {
if (x%5==1 && x%6==5 && x%7==4 && x%11==10) {
printf(" x = %d\n", x); goto END; } } END: ; }
4、委派任务:某侦察队接到一项紧急任务,要求在A、B、C、D、E、F六个队员中尽可能多地挑若干 人,但有以下限制条件:
A和B两人中至少去一人; A和D不能一起去; A、E和F三人中要派两人去; B和C都去或都不去; C和D两人中去一个; 若D不去,则E也不去。 问应当让哪几个人去?
5、在下面的加法算式中,不同的符号代表不同的数字,相同的符号代表相同的数字。请设计程序求出" 都、要、学、C"4个符号分别代表的数字。提示:让计算机解奥数题。穷举"都、要、学、C"4个符号分 别代表的数字(从0到9),然后进行组合,如果组合起来符合规则(不同的符号代表不同的数字,相同 的符号代表相同的数字,且使等式成立),则为正解。
穷举法求解韩信点兵:方案2-break
#include <stdio.h> void main() {
int x;
for (x=1; ;x++) {
if (x%5==1 && x%6==5 && x%7==4 && x%11==10) {
printf(" x = %d\n", x); break; } } }
结果:x=0,y=25,z=75 x=4,y=18,z=78 x=8,y=11,z=81 x=12,y=4,z=84
{
if (z%3==0 &&x+y+z==100 && 5*x+3*y+z/3==100 )
printf("x=%d,y=%d,z=%d\n",x,y,z);
}
}
【讨论】 此为“最笨”之法——要进行101×101×101= 1030301次(100多万次)运算。
穷举法求解韩信点兵
#include <stdio.h> void main() {
int x;
for (x=1; ;x++) {
if (x%5==1 && x%6==5 && x%7==4 && x%11==10) {
printf(" x = %d\n", x); } } } /*死循环——永远不会退出的循环*/
6、警察局抓住了A、B、C、D四名盗窃嫌疑犯,其中只有一人是小偷。在审问时,A说:“我不是小 偷”;B说:“C是小偷”;C说:“小偷肯定是D”;D说:“C在冤枉好人”。现在已经知道这四人中 有三人说的是真话,一人说的是假话。请问到底谁是小偷?
void main()
{ int x,y,z; for (x=0;x<=100;x++)
取x<=20,y<=33 只进行21×34= 714 次运 算(第1种运算的6.9e-4)
for (y=0;y<=100;y++)
{
z=100-x-y;
if (z%3==0 && 5*x+3*y+z/3==100 )
‘A’==‘C’
假,值为0。
C说:thisman==‘D’;
‘A’==‘D’
假,值为0。
D说:thisman!=‘D’;
‘A’!=‘D’
真,值为1。
显然,不是'A'做的好事(四个关系表达式值的和为1)
再试B同学,让thisman=‘B’;
代入到四句话中
A说:thisman!=‘A’; ‘B’!=‘A’
for (y=0;y<=25;y++)
if (7*x+4*y==100 )
{
z=100-x-y;
printf("cocks=%d,hens=%d,chickens=%d\n",x,y,z);
}
}
课堂讨论:谁做的好事?
有四位同学中的一位做了好事,不留名,表扬信来了之后,校长问这四位是谁做的好事。 A说:不是我。 B说:是C。 C说:是D。 D说:C胡说。 已知三个人说的是真话,一个人说的是假话。现在要根据这些信息,找出做了好事的人。
{
sa=(thisman != 'A');
sb=(thisman == 'C');
sc=(thisman == 'D');
sd=(thisman != 'D');
cond=sa+sb+sc+sd;
if (cond==3)
printf("做好事的人是:%c\n", thisman);
}
}பைடு நூலகம்
利用穷举法求解趣味智力题
A说:thisman!=‘A’; ‘C’!=‘A’
真,值为1。
B说:thisman==‘C’; ‘C’==‘C’
真,值为1。
C说:thisman==‘D’; ‘C’==‘D’
假,值为0。
D说:thisman!=‘D’; ‘C’!=‘D’ 真,值为1。
显然,就是‘C’做了好事(四个关系表达式值之和为3)
穷举法求解韩信点兵
#include <stdio.h> void main() {
int x;
for (x=1; x < 5000 ;x++) {
if (x%5==1 && x%6==5 && x%7==4 && x%11==10) {
printf(" x = %d\n", x); } } } /*属于“瞎猫碰死耗子”的做法*/
真,值为1。
B说:thisman==‘C’; ‘B’==‘C’
假,值为0。
C说:thisman==‘D’; ‘B’==‘D’
假,值为0。
D说:thisman!=‘D’; ‘B’!=‘D’
真,值为1。
显然,不是'B'所为(四个关系表达式值的和为2)
再试C同学,让thisman=‘C’;
代入到四句话中
穷举法求解韩信点兵:方案3-标志变量
#include <stdio.h> void main() {
int x; int find = 0;
/*设置找到标志为假*/
for (x=1; !find ;x++) {
if (x%5==1 && x%6==5 && x%7==4 && x%11==10) {
(韩信点兵) 韩信有一队兵,他想知道有多少人,便让士兵排队报数。按从1至5报数,最末一个士兵报的数为1;按从1至 6报数,最末一个士兵报的数为5;按从1至7报数,最末一个士兵报的数为4;最后再按从1至11报数,最末一 个士兵报的数为10。你知道韩信至少有多少兵吗?
设兵数为x,则x应满足: x%5 == 1 && x%6 == 5 && x%7 == 4 && x%11 == 10 穷举法对x从1开始试验
printf(" x = %d\n", x); find = 1; } } }
练习题 1、试编程求出100000~200000之间间隔最大的两个素数并输出,同时输出最大间隔。 2、试编程求出八位数中所有的水仙花数。三位水仙花为 abc=a^3+b^3+c^3,八位数水仙花为该数字等 于所有位数的八次方之和。 3、年龄几何:张三、李四、王五、刘六的年龄成一等差数列,他们四人的年龄相加是26,相乘是880, 求以他们的年龄为前4项的等差数列的前20项。
printf("x=%d,y=%d,z=%d\n",x,y,z);
}
穷举算法及解题
穷举算法及解题
例12-1 古希腊人认为因子的和等于它本身的数是一个完全数(自身因子除外),例如28的因子是1、
2、4、7、14,且1+2+4+7+14=28,则28是一个完全数,编写一个程序求2~1000内的所有完全数。 问题分析
(1) 本题是一个搜索问题,搜索范围2~1000,找出该范围内的完全数;
(2) 完全数必须满足的条件:因子的和等于该数的本身;
(3) 问题关键在于将该数的因子一一寻找出来,并求出因子的和:分解因子的方法比较简单,采用循环完成分解因子和求因子的和。
程序如下:
program p12_1;
var a,b,s:integer;
program jitu;
var
a,b,c,d,e,f,x,y:integer;
begin
for a:=2 to 6 do
for b:=1 to 6 do
for c:=1 to 6 do
for d:=2 to 6 do
for e:=1 to 6 do
begin
f:=21-a-b-c-d-e;
Var a,b,c,d:integer;
X,x0,x1,x2,x3,x4:integer;
st1:set of 1..100;
function number(a,b,c,d:integer):integer;
var n1,n2,n3,n4,sum:integer;
begin
st1:=[];
2、有一个三位数,个位数字比百位数字大,而百位数字又比十位数字大,并且各位数字之和等于各位数字相乘之积,求此三位数。
用穷举法求解问题的实践示例
利用穷举法解决问题一、填空题解决问题常见的算法有:解析法、穷举法、递归法、冒泡排序法,根据问题选择合适的算法。
1. 列举所有可能的情况,逐个判断有哪些是符合问题所需要的条件,从而得到问题的解答,这是的思路。
2、水仙花数是一个三位数,其各位数字的立方和等于该数本身,如333153153=++,要找出所有的水仙花数,选择的算法是。
3、一张单据上有一个5位数的号码67__ __8,其中百位和十位的数字看不清楚了,但知道该数能够被78整除,也能被67整除,求出该号码。
应该选择的算法是。
4. “百钱买百鸡”问题:已知公鸡每只5元,母鸡每只3元,每3只小鸡1元,用100元买100只鸡,问每种鸡应各买多少?应该选择的算法是。
二、分析程序写出运行结果或补全程序。
1、“百钱买百鸡”问题:已知公鸡每只5元,母鸡每只3元,每3只小鸡1元,用100元买100只鸡,问每种鸡应各买多少?(1)使用三重循环,代码如下:Private Sub Command1_Click()Dim x As Integer, y As Integer, z As IntegerFor x = 0 To 20For y = 0 To 33For z = 0 To 99 Step 3If ThenPrint "公鸡"; x, "母鸡"; y, "小鸡"; zEnd IfNextNextNextEnd Sub(2)使用二重循环,程序如下:Private Sub Command1_Click()Dim x As Integer, y As Integer, z As IntegerFor x = 0 To 20For y = 0 To 33z =If ThenPrint "公鸡"; x, "母鸡"; y, "小鸡"; zEnd IfNextNextEnd Sub2、一张单据上有一个5位数的号码67__ __8,其中百位和十位的数字看不清楚了,但知道该数能够被78整除,也能被67整除,求出该号码。
c语言穷举法傻瓜教程
穷举法1.密码箱问题#include<stdio.h>main(){int i,key;printf("请设定旅行箱的密码(000-999):"); scanf("%d",&key);printf("\n你的旅行箱密码是:");for(i=0;i<=999;i++)if(i==key)if(i<10)printf("%d\n",i);else if(i<100)printf("%d\n",i);else printf("%d\n",i);}2.百钱买百鸡问题#include<stdio.h>main(){int i , j , k;/*准备输出格式*/printf("\t公鸡\t母鸡\t小鸡\n");for(i=0;i<=20;i++)for(j=0;j<=33;j++){k=100-i-j;if(k%3==0 && i*5+j*3+k/3==100) printf("\t%d\t%d\t%d\n",i ,j ,k); }}例 2 :36 块砖,36 人搬。
男搬 4 ,女搬 3 ,两个小儿抬一砖。
要求一次全搬完。
问需男、女、小儿各若干(必须都有)?请同学们先分析第一步:问题所涉及的情况;analysis:都男的搬,需9人;都女的搬,需12人,都小孩搬,需72人;小孩书需要是2的整数倍;解:#include<stdio.h>main(){int i,j,k;for(i=0;i<=9;i++)for(j=0;j<=12;j++){k=36-i-j;//消去参数需放在最后一个for循环里面if(k%2==0&&i*4+j*3+k*0.5==36)printf("%d\t%d\t%d\n",i,j,k);}作业:换零钞问题:一张100元,换成20,10,5,1面值的零钞,每种至少一张,共有哪些换法,总计多少种换法?都换20:5张;----i都换10:10张;----j都换5:20张;----k都换1:100张----tt=100-i-j-k;解:#include<stdio.h>main()int i,j,k,t;for(i=1;i<=5;i++)for(j=1;j<=10;j++)for(k=1;k<=20;k++){t=100-i*20-j*10-k*5;if(i*20+j*10+k*5+t==100&&t>0)printf("%d\t%d\t%d\t%d\n",i,j,k,t);}}2.从1到100的自然数中,每次取出两个数,要使它们的和大于100,共有哪些取法,总计多少种取法?#include<stdio.h>main(){static int count=0;int i,j;for(i=1;i<=100;i++)for(j=1;j<=100;j++){if((i+j)>100&&j!=i){count++;printf("i=%d\tj=%d\n",i,j);}}printf("循环次数为%d\n",count);}。
C语言中用穷举法实现的几个问题
C语言中用穷举法实现的几个问题1.百鸡问题(零钱换整钱也是这类问题):用100元买100只鸡,大公鸡5元1只,母鸡3元1只,小鸡1元3只。
问各能买多少只?分析:把公鸡、母鸡、小鸡只数分别设为未知数gj、mj、xj,则三个未知数有如下一些情况:gj:1--20 mj:1--33 xj:1--100,并且它们须符合以下条件:gj+mj+xj=100,同时5*gj+3*mj+xj/3=100.程序编写如下:解法一:#include <stdio.h>#include <stdlib.h>void main(){int gj,mj,xj,count=0;for(gj=0;gj<=20;gj++)for(mj=0;mj<=33;mj++){xj=100-gj-mj;if(15*gj+9*mj+xj==300){printf("\n公鸡:%4d 母鸡:%4d 小鸡:%4d\n",gj,mj,xj);count++;}}printf("\n共计有%d种买法!\n",count);system("pause");}解法二:#include <stdio.h>#include <stdlib.h>void main(){int gj,mj,xj,count=0;for(gj=0;gj<=20;gj++)for(mj=0;mj<=33;mj++)for(xj=0;xj<=100;xj++)if((gj+mj+xj==100)&&(15*gj+9*mj+xj==300)){printf(" 公鸡:%4d 母鸡: %4d 小鸡: %4d\n",gj,mj,xj);count++;}printf("共计%d有种买法!\n",count);system("pause");}2.某处发生一起案件,侦察得知如下可靠线索:ABCD四人都有作案可能,AB中至少一人参与作案,BC中至少一人参与作案,CD中至少一人参与作案,AC中至少一人未参与作案。
穷举算法及解题
穷举算法及解题穷举算法及解题例12-1 古希腊人认为因子的和等于它本身的数是一个完全数(自身因子除外),例如28的因子是1、2、4、7、14,且1+2+4+7+14=28,则28是一个完全数,编写一个程序求2~1000内的所有完全数。
问题分析(1)本题是一个搜索问题,搜索范围2~1000,找出该范围内的完全数;(2)完全数必须满足的条件:因子的和等于该数的本身;(3)问题关键在于将该数的因子一一寻找出来,并求出因子的和:分解因子的方法比较简单,采用循环完成分解因子和求因子的和。
程序如下:program p12_1;var a,b,s:integer;beginfor a:=2 to 1000 dobegins:=0;for b:=1 to a-1 doif a mod b =0 then s:=s+b;if a=s then beginwrite(a,'=',1,);for b:=2 to a-1 doif a mod b=0 then write('+',b);writeln;end;end;end.当程序运行后,输出结果:6=1+2+328=1+2+4+7+14496=1+2+4+8+16+31+62+124+248例12-3邮局发行一套票面有四种不同值的邮票,如果每封信所帖邮票张数不超过三枚,存在整数r,使得用不超过三枚的邮票,可以贴出连续的整数1、2、3、……、r来,找出这四种面值数,使得r值最大。
问题分析:本题则是知道每封信邮票数的范围(<=3),邮票有四种类型,编程找出能使面值最大邮票。
其算法是:(1) 面值不同的四种邮票,每封信所贴邮票不超过3张;(2) 用这四种邮票贴出连续的整数,并且使r值最大;(3) 用穷举法,找出所有符合条件的解;(4) 本题用集合的方法统计邮票的面值,提高判重的速度。
设四种邮票的面值分别为:a,b,c,d,根据题意设:a<b<c<d,因此a=1,用循环语句完成搜索。
C语言程序设计---穷举法
目录
后退
前进
结束
江苏省高淳职教中心校 张建青
我国古代数学家张丘建在《算经》 例 1 : 我国古代数学家张丘建在《算经》中出 了这样一道题目:鸡翁一,值五钱,鸡母一, 了这样一道题目:鸡翁一,值五钱,鸡母一,值 三钱,鸡雏三,值一钱,百钱买百鸡,问鸡翁、 三钱,鸡雏三,值一钱,百钱买百鸡,问鸡翁、 鸡母、鸡雏各几何? 鸡母、鸡雏各几何?
目录
后退
前进
结束
江苏省高淳职教中心校 张建青
我们将条件方程改变一下: 我们将条件方程改变一下: k=100 - i - j i *5+j *3+k/3==100
如此,便不再需要k循环了 如此,便不再需要 循环了
目录
后退
前进
结束
江苏省高淳职教中心校 张建青
改进后的程序
#include<stdio.h> main() { int i , j , k; /*准备输出格式 准备输出格式*/ 准备输出格式 printf("\t公鸡 母鸡 小鸡 公鸡\t母鸡 小鸡\n"); 公鸡 母鸡\t小鸡 for(i=0;i<=20;i++) for(j=0;j<=33;j++) { k=100-i-j; if(i*5+j*3+k/3==100) printf("\t%d\t%d\t%d\n" ,i ,j ,k); } }
穷举法的思路
穷举算法是程序设计中使用得最为普遍、 大家必须熟练掌握和正确运用的一种算法。 它利用计算机运算速度快、精确度高的特 点,对要解决问题的所有可能情况,一个 不漏地进行检查,从中找出符合要求的答 案。
目录
c语言穷举法经典例题
c语言穷举法经典例题穷举法是一种常用的计算机算法,用于遍历所有可能的解决方案以找到最佳解决方案。
在C语言中,穷举法经常被用来解决一些经典的例题。
本文将介绍三个常见的C语言穷举法经典例题,并给出相应的解决方法。
1. 例题一:找出100以内的所有素数要求:编写一个程序,找出100以内的所有素数。
解决思路:穷举法通过考察每个数,判断其是否满足某个条件,来找出符合条件的解。
对于找素数的问题,我们可以从2开始,逐个判断每个数是否为素数。
如果一个数不是素数,那么它一定可以被一个小于它的数整除。
因此,我们可以用两个循环来实现穷举法的思想。
```c#include <stdio.h>int main() {int i, j;for (i = 2; i <= 100; i++) {int isPrime = 1; // 假设当前数为素数for (j = 2; j < i; j++) {if (i % j == 0) {isPrime = 0; // 当前数不是素数break;}}if (isPrime) {printf("%d ", i);}}return 0;}```以上代码中,外层循环遍历从2到100的所有数,内层循环用来判断当前数是否为素数。
如果当前数能够被除1和自身以外的数整除,则将isPrime标记为0,表示不是素数。
最后,打印出所有素数的值。
2. 例题二:猜数字游戏要求:编写一个猜数字的游戏,随机生成一个1到100的整数,玩家通过输入数字来猜测,直到猜中为止,给出总共猜了多少次。
解决思路:穷举法可以通过循环来逐个尝试所有可能的选择,直到找到解决方案。
对于猜数字游戏,我们可以利用rand()函数来生成一个伪随机数字,并与玩家的猜测进行比较,直到猜中为止。
```c#include <stdio.h>#include <stdlib.h>#include <time.h>int main() {srand(time(0)); // 初始化随机数生成器int target = rand() % 100 + 1; // 生成1到100之间的随机数int guess, count = 0;do {printf("请输入你猜测的数字:");scanf("%d", &guess);if (guess > target) {printf("太大了!\n");} else if (guess < target) {printf("太小了!\n");}count++;} while (guess != target);printf("恭喜你,猜对了!总共猜了%d次。
c语言穷举法经典例题
c语言穷举法经典例题一、引言穷举法是一种常见的编程方法,通过逐个测试所有可能的选项,以确定满足特定条件的解决方案。
这种方法在许多问题中都有应用,例如数独、斐波那契数列、判断一个数是否为素数等。
本篇文章将介绍几个C语言中的经典穷举法例题,帮助您更好地理解这一方法的应用。
二、经典例题1. 数独求解问题描述:给定一个9x9的数独网格,要求找出满足规则的所有解。
规则为每个数字只能出现一次。
代码实现:```c#include <stdio.h>#include <stdlib.h>int main() {int board[9][9]; // 数独网格int i, j;int solutions = 0; // 记录解的数量// 穷举所有可能的情况for (i = 0; i < 9; i++) {for (j = 0; j < 9; j++) {// 逐个尝试数字1到9board[i][j] = 1 + rand() % 8; // 使用随机数字以增加难度 // 检查当前数字是否满足规则for (int k = 0; k < i * 3 + j * 3 + 1; k++) { // 检查周围3x3的格子是否有重复数字if (board[i + k / 3][j + k % 3] == board[i][j]) { // 检查上方是否有重复数字board[i][j] = -1; // 如果重复则标记为无效数字,跳过下一个循环break;}}if (board[i][j] != -1) { // 如果当前数字满足规则,则增加解的数量并继续下一个循环solutions++;}}}// 输出解的数量并结束程序printf("Number of solutions: %d\n", solutions);return 0;}```这段代码通过穷举所有可能的情况,检查每个数字是否满足规则,最终找到所有符合规则的解。
C语言编程练习题绝对经典
马克思手稿中有一道趣味数学题:有30个人,其中有男人、女人和小孩,在一家饭馆里吃饭共花了50先令,每个男人各花3先令,每个女人各花2先令,每个小孩各花1先令,问男人、女人和小孩各有几人解方程组编写程序,采用穷举法求出结果;编写程序,根据以下公式求e 的值;要求用两种方法计算:1for 循环,计算前50项 2while 循环,直至最后一项的值小于10-4从键盘中输入一个数字不限位数,用循环语句编程判断并输出这个数字的位数;猴子吃桃子问题;猴子第一天摘下若干个桃,当即只一半,又多吃一个;第二天早上又将剩下的一半吃掉一半,双多吃一个;以后每天早上都吃了前天剩下的一半零一个,到第10天早上只剩下最后一个桃;问第一天摘了几个桃;编程打印九九乘法表青年歌手参加歌曲大奖赛,有10个评委打分,试编程求选手的平均得分去掉一个最高分和一个最低分;从键盘中输入一个数字可以包含小数点,其位数在60位以下,求其整数的有效位数,如输入0123.456,返回值为整数有效位数为31输入数据为浮点型,不用数组,不用字符串,只有变量的算术运算实现此功能;2使用数组来进行编程;使用数组,编写一个十进制正整数转换为任意进制数的转换工具;大进制向小进制的转换;方法是相除去余10进制327转八进制:327/8=40余数为740/8=5余数为0于是八进制数为507第一位5是最后的商使用数组,编写一个任意进制正整数转换为十进制的转换工具;以2,10进制互转为例,其他请举一反三:二进制数1101转十进制:1×2的三次幂+1×2的二次幂+0×2的一次幂+1×2的零次幂=8+4+0+1=1310个小孩围成一圈分糖果,老师顺次分给每个人的糖块数为12,2,8,22,16,4,10,6,14,20;然后按下列规则调整,所有小孩同时把自己的糖果分一半给右边的小孩,糖块数变为奇数的人,再向老师补要一块,问经过多少次调整后,大家的糖块一样多,且每人多少块;编写一个函数,用以求x2-5x+4的值,x 做为函数的形参,调用此函数,求:y1=22-5×2+4Y2=x+152-5x+15+4Y3=sinx2-5sinx+4sinx 可以加载”math.h ”库函数后使用,函数说明为 doublesindoublex编写一个函数,使给定的一个二维数组N ×N 行列互换N>3;从键盘中输入一个不超过40个字符的字符串,再输入一个位数,删除对应位数的字符,然后输出删除指定字符后的字符串11111111!2!3!4!5!!e n ≈++++++⋅⋅⋅⋅⋅⋅+要求:1用puts输出指示信息2用gets接收字符串如果有一个正整数从左、右来读都是一样的,则称为回文式数简称回数;比如101,32123,999都是回数;数学中有名的“回数猜想”之迷,至今未解决;回数猜想:任取一个数,再把它倒过来,并把这两个数相加,然后把这个和数再倒过来,与原和数相加,重复此过程,一定能获得一个回数;例:68倒过来是8668+86=154154+541=605605+506=1111回数编程,输入任意整数,按上述方法产生一个回数,为简便起见,最多计算7步,看是否能得到一个回数; 要求:主函数中接收键盘数据,必须用scanf“%ld”,&变量名接收整型变量,显示该数与其倒数的和,输出每一步计算步骤;子函数1,计算该数的倒数;子函数2,验证和是否为回数,是则主函数打印“经过n次计算,得到回数”,超过7次未能得到回数,显示,“经过n次计算,未得到回数”求Sn=a+aa+aaa+------+aaaaaaan个a,其中a和n都从键盘中输入,如从键盘中输入2,5,则计算S5=2+22+222+2222+22222;include"stdio.h"voidmain{inta,n,i=1;longs=0,t=0;printf"a=";scanf"%d",&a;printf"n=";scanf"%d",&n;whilei<=n{t=t+a;s=s+t;a=a10;++i;}printf"sum=%d",s;}两个乒乓球队进行比赛,各出三人;甲队为A,B,C三人,乙队为X,Y,Z三人;已抽签决定比赛名单,有人向队员打听比赛的名单,A说他不和X比,C说他不和X、Z比,编程找出三对选手的对手名单;注:使用穷举法include"stdio.h"intmain{inti,j,k;fori=1;i<=3;++i{forj=1;j<=3;++j{fork=1;k<=3;++k{ifi==j||j==k||i==kcontinue;ifi=1&&k=1&&k=3{printf"Avs%c\n",i+'X'-1;printf"Bvs%c\n",j+'X'-1;printf"Cvs%c\n",k+'X'-1;return0;}}}}return0;}编写一个函数,函数说明为:charlastcharcharstr功能:求一个字符串的最后一个字符,如果是空串,则返回空字符;再利用该函数编程,输入两个字符串,输出第一字符串的最后一个字符和第二个字符串的最后一个字符;韩信点兵;韩信有一队兵,他想知道有多少人,便让士兵排队报数:按从1至5报数,最末一个士兵报的数为1;按从1至6报数,最末一个士兵报的数为5;按从1至7报数,最末一个士兵报的数为4;最后再按从1至11报数,最末一个士兵报的数为10;编程求韩信至少有多少兵include"stdio.h"voidmain{inti;fori=1;;i++{ifi%5==1&&i%6==5&&i%7==4&&i%11==10{printf"%d",i;break;}}}用递归方法计算下列函数的值:fxx,n=x-x2+x3-x4+......-1n-1xnn>0要求:1写出递归函数的原型2编写程序4用递归法将一个整数转换成字符形式输出;例如输入483,应输出字符串“483”;其程序如下,请验证,并修改程序,增加显示出输入数字的位数的功能,并使输出结果与下图一致; voidconvertlongn{longi;ifi=n/10=0converti;putcharn%10+'0';}main{longnumber;scanf"%ld",&number;ifnumber<0{putchar'-';number=-number;}convertnumber;}利用以下公式,编程计算π的值,直到最后一项的绝对值用函数fabs小于0.0001为止;程序1题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数都是多少1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4;组成所有的排列后再去掉不满足条件的排列;2.程序源代码:include"stdio.h"include"conio.h"main{inti,j,k;printf"\n";fori=1;i<5;i++/以下为三重循环/forj=1;j<5;j++fork=1;k<5;k++{ifi=k&&i=j&&j=k/确保i、j、k三位互不相同/printf"%d,%d,%d\n",i,j,k;}getch;}===========================================程序2题目:企业发放的奖金根据利润提成;利润I低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数1.程序分析:请利用数轴来分界,定位;注意定义时需把奖金定义成长整型;2.程序源代码:include"stdio.h"include"conio.h"main{longinti;intbonus1,bonus2,bonus4,bonus6,bonus10,bonus;scanf"%ld",&i;bonus1=1000000.1;bonus2=bonus1+1000000.75;bonus4=bonus2+2000000.5;bonus6=bonus4+2000000.3;bonus10=bonus6+4000000.15;ifi<=100000bonus=i0.1;elseifi<=200000bonus=bonus1+i-1000000.075;elseifi<=400000bonus=bonus2+i-2000000.05;elseifi<=600000bonus=bonus4+i-4000000.03;elseifi<=1000000bonus=bonus6+i-6000000.015;elsebonus=bonus10+i-10000000.01;printf"bonus=%d",bonus;getch;}===========================================程序3题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足如下条件,即是结果;请看具体分析:2.程序源代码:include"math.h"include"stdio.h"include"conio.h"main{longinti,x,y,z;fori=1;i<100000;i++{x=sqrti+100;/x为加上100后开方后的结果/y=sqrti+268;/y为再加上168后开方后的结果/ifxx==i+100&&yy==i+268/如果一个数的平方根的平方等于该数,这说明此数是完全平方数/ printf"\n%ld\n",i;}getch;}===========================================程序4题目:输入某年某月某日,判断这一天是这一年的第几天1.程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天;2.程序源代码:include"stdio.h"include"conio.h"main{intday,month,year,sum,leap;printf"\npleaseinputyear,month,day\n";scanf"%d,%d,%d",&year,&month,&day;switchmonth/先计算某月以前月份的总天数/{case1:sum=0;break;case2:sum=31;break;case3:sum=59;break;case4:sum=90;break;case5:sum=120;break;case6:sum=151;break;case7:sum=181;break;case8:sum=212;break;case9:sum=243;break;case10:sum=273;break;case11:sum=304;break;case12:sum=334;break;default:printf"dataerror";break;}sum=sum+day;/再加上某天的天数/ifyear%400==0||year%4==0&&year%100=0/判断是不是闰年/leap=1;elseleap=0;ifleap==1&&month>2/如果是闰年且月份大于2,总天数应该加一天/sum++;printf"Itisthe%dthday.",sum;getch;}===========================================程序5题目:输入三个整数x,y,z,请把这三个数由小到大输出;1.程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换,然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小;2.程序源代码:include"stdio.h"include"conio.h"main{intx,y,z,t;scanf"%d%d%d",&x,&y,&z;ifx>y{t=x;x=y;y=t;}/交换x,y的值/ifx>z{t=z;z=x;x=t;}/交换x,z的值/ify>z{t=y;y=z;z=t;}/交换z,y的值/printf"smalltobig:%d%d%d\n",x,y,z;getch;}===========================================程序6题目:用号输出字母C的图案;1.程序分析:可先用''号在纸上写出字母C,再分行输出;2.程序源代码:include"stdio.h"include"conio.h"main{printf"HelloC-world\n";printf"\n";printf"\n";printf"\n";printf"\n";getch;}===========================================程序7题目:输出特殊图案,请在c环境中运行,看一看,VeryBeautiful1.程序分析:字符共有256个;不同字符,图形不一样;2.程序源代码:include"stdio.h"include"conio.h"main{chara=176,b=219;printf"%c%c%c%c%c\n",b,a,a,a,b;printf"%c%c%c%c%c\n",a,b,a,b,a;printf"%c%c%c%c%c\n",a,a,b,a,a;printf"%c%c%c%c%c\n",a,b,a,b,a;printf"%c%c%c%c%c\n",b,a,a,a,b;getch;}============================================================== 程序8题目:输出99口诀;1.程序分析:分行与列考虑,共9行9列,i控制行,j控制列;2.程序源代码:include"stdio.h"include"conio.h"main{inti,j,result;printf"\n";fori=1;i<10;i++{forj=1;j<10;j++{result=ij;printf"%d%d=%-3d",i,j,result;/-3d表示左对齐,占3位/}printf"\n";/每一行后换行/}getch;}===========================================程序9题目:要求输出国际象棋棋盘;1.程序分析:用i控制行,j来控制列,根据i+j的和的变化来控制输出黑方格,还是白方格;2.程序源代码:include"stdio.h"include"conio.h"main{inti,j;fori=0;i<8;i++{forj=0;j<8;j++ifi+j%2==0printf"%c%c",219,219;elseprintf"";printf"\n";}getch;}==============================================================程序10题目:打印楼梯,同时在楼梯上方打印两个笑脸;1.程序分析:用i控制行,j来控制列,j根据i的变化来控制输出黑方格的个数;2.程序源代码:include"stdio.h"include"conio.h"main{inti,j;printf"\1\1\n";/输出两个笑脸/fori=1;i<11;i++{forj=1;j<=i;j++printf"%c%c",219,219;printf"\n";}getch;}.:.:经典c程序100例==11--20:.:.经典c程序100例==11--20程序11题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少1.程序分析:兔子的规律为数列1,1,2,3,5,8,13,21....2.程序源代码:include"stdio.h"include"conio.h"main{longf1,f2;inti;f1=f2=1;fori=1;i<=20;i++{printf"%12ld%12ld",f1,f2;ifi%2==0printf"\n";/控制输出,每行四个/f1=f1+f2;/前两个月加起来赋值给第三个月/f2=f1+f2;/前两个月加起来赋值给第三个月/}getch;}==============================================================程序12题目:判断101-200之间有多少个素数,并输出所有素数;1.程序分析:判断素数的方法:用一个数分别去除2到sqrt这个数,如果能被整除,则表明此数不是素数,反之是素数;2.程序源代码:include"stdio.h"include"conio.h"include"math.h"main{intm,i,k,h=0,leap=1;printf"\n";form=101;m<=200;m++{k=sqrtm+1;fori=2;i<=k;i++ifm%i==0{leap=0;break;}ifleap{printf"%-4d",m;h++;ifh%10==0printf"\n";}leap=1;}printf"\nThetotalis%d",h;getch;}===========================================程序13题目:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身;例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方;1.程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位;2.程序源代码:include"stdio.h"include"conio.h"main{inti,j,k,n;printf"'waterflower'numberis:";forn=100;n<1000;n++{i=n/100;/分解出百位/j=n/10%10;/分解出十位/k=n%10;/分解出个位/ifi100+j10+k==iii+jjj+kkkprintf"%-5d",n;}getch;}===========================================程序14题目:将一个正整数分解质因数;例如:输入90,打印出90=2335;程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:1如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可;2如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步;3如果n不能被k整除,则用k+1作为k的值,重复执行第一步;2.程序源代码:/zhengintisdividedyinshu/include"stdio.h"include"conio.h"main{intn,i;printf"\npleaseinputanumber:\n";scanf"%d",&n;printf"%d=",n;fori=2;i<=n;i++whilen=i{ifn%i==0{printf"%d",i;n=n/i;}elsebreak;}printf"%d",n;getch;}===========================================程序15题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B 表示,60分以下的用C表示;1.程序分析:a>ba:b这是条件运算符的基本例子;2.程序源代码:include"stdio.h"include"conio.h"main{intscore;chargrade;printf"pleaseinputascore\n";scanf"%d",&score;grade=score>=90'A':score>=60'B':'C';printf"%dbelongsto%c",score,grade;getch;}===========================================程序16题目:输入两个正整数m和n,求其最大公约数和最小公倍数;1.程序分析:利用辗除法;2.程序源代码:include"stdio.h"include"conio.h"main{inta,b,num1,num2,temp;printf"pleaseinputtwonumbers:\n";scanf"%d,%d",&num1,&num2;ifnum1<num2/交换两个数,使大数放在num1上/{temp=num1;num1=num2;num2=temp;}a=num1;b=num2;whileb=0/利用辗除法,直到b为0为止/{temp=a%b;a=b;b=temp;}printf"gongyueshu:%d\n",a;printf"gongbeishu:%d\n",num1num2/a;getch;}===========================================程序17题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数;1.程序分析:利用while语句,条件为输入的字符不为'\n'.2.程序源代码:include"stdio.h"include"conio.h"main{charc;intletters=0,space=0,digit=0,others=0;printf"pleaseinputsomecharacters\n";whilec=getchar='\n'{ifc>='a'&&c<='z'||c>='A'&&c<='Z'letters++;elseifc==''space++;elseifc>='0'&&c<='9'digit++;elseothers++;}printf"allinall:char=%dspace=%ddigit=%dothers=%d\n",letters,space,digit,others;getch;}===========================================程序18题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字;例如2+22+222+2222+22222此时共有5个数相加,几个数相加有键盘控制;1.程序分析:关键是计算出每一项的值;2.程序源代码:include"stdio.h"include"conio.h"main{inta,n,count=1;longintsn=0,tn=0;printf"pleaseinputaandn\n";scanf"%d,%d",&a,&n;printf"a=%d,n=%d\n",a,n;whilecount<=n{tn=tn+a;sn=sn+tn;a=a10;++count;}printf"a+aa+...=%ld\n",sn;getch;}==============================================================程序19题目:一个数如果恰好等于它的因子之和,这个数就称为“完数”;例如6=1+2+3.编程找出1000以内的所有完数;1.程序分析:请参照程序<--上页程序14.2.程序源代码:include"stdio.h"include"conio.h"main{staticintk10;inti,j,n,s;forj=2;j<1000;j++{n=-1;s=j;fori=1;i<j;i++{ifj%i==0{n++;s=s-i;kn=i;}}ifs==0{printf"%disawanshu",j;fori=0;i<n;i++printf"%d,",ki;printf"%d\n",kn;}}getch;}==============================================================程序20题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米第10次反弹多高1.程序分析:见下面注释2.程序源代码:include"stdio.h"include"stdio.h"main{floatsn=100.0,hn=sn/2;intn;forn=2;n<=10;n++{sn=sn+2hn;/第n次落地时共经过的米数/hn=hn/2;/第n次反跳高度/}printf"thetotalofroadis%f\n",sn;printf"thetenthis%fmeter\n",hn;getch;}.:.:经典c程序100例==21--30:.:.经典c程序100例==21--30程序21题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个;以后每天早上都吃了前一天剩下的一半零一个;到第10天早上想再吃时,见只剩下一个桃子了;求第一天共摘了多少;1.程序分析:采取逆向思维的方法,从后往前推断;2.程序源代码:include"stdio.h"include"conio.h"main{intday,x1,x2;day=9;x2=1;whileday>0{x1=x2+12;/第一天的桃子数是第2天桃子数加1后的2倍/x2=x1;day--;}printf"thetotalis%d\n",x1;getch;}===========================================程序22题目:两个乒乓球队进行比赛,各出三人;甲队为a,b,c三人,乙队为x,y,z三人;已抽签决定比赛名单;有人向队员打听比赛的名单;a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单;1.程序分析:判断素数的方法:用一个数分别去除2到sqrt这个数,如果能被整除,则表明此数不是素数,反之是素数;2.程序源代码:include"stdio.h"include"conio.h"main{chari,j,k;/i是a的对手,j是b的对手,k是c的对手/fori='x';i<='z';i++forj='x';j<='z';j++{ifi=jfork='x';k<='z';k++{ifi=k&&j=k{ifi='x'&&k='x'&&k='z'printf"orderisa--%c\tb--%c\tc--%c\n",i,j,k;}}}getch;}===========================================程序23题目:打印出如下图案菱形1.程序分析:先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重for循环,第一层控制行,第二层控制列;2.程序源代码:include"stdio.h"include"conio.h"main{inti,j,k;fori=0;i<=3;i++{forj=0;j<=2-i;j++printf"";fork=0;k<=2i;k++printf"";printf"\n";}fori=0;i<=2;i++{forj=0;j<=i;j++printf"";fork=0;k<=4-2i;k++printf"";printf"\n";}getch;}===========================================程序24题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和;1.程序分析:请抓住分子与分母的变化规律;2.程序源代码:include"stdio.h"include"conio.h"mainintn,t,number=20;floata=2,b=1,s=0;forn=1;n<=number;n++{s=s+a/b;t=a;a=a+b;b=t;/这部分是程序的关键,请读者猜猜t的作用/ }printf"sumis%9.6f\n",s;getch;}===========================================程序25题目:求1+2+3+...+20的和1.程序分析:此程序只是把累加变成了累乘;2.程序源代码:include"stdio.h"include"conio.h"main{floatn,s=0,t=1;forn=1;n<=20;n++{t=n;s+=t;}printf"1+2+3...+20=%e\n",s;getch;}===========================================程序26题目:利用递归方法求5;1.程序分析:递归公式:fn=fn_142.程序源代码:include"stdio.h"include"conio.h"main{inti;intfact;fori=0;i<5;i++printf"\40:%d=%d\n",i,facti;getch;}intfactjintj;{intsum;ifj==0sum=1;elsesum=jfactj-1;returnsum;}===========================================程序27题目:利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来;1.程序分析:2.程序源代码:include"stdio.h"include"conio.h"main{inti=5;voidpalinintn;printf"\40:";palini;printf"\n";getch;}voidpalinnintn;{charnext;ifn<=1{next=getchar;printf"\n\0:";putcharnext;}else{next=getchar;palinn-1;putcharnext;}}===========================================程序28题目:有5个人坐在一起,问第五个人多少岁他说比第4个人大2岁;问第4个人岁数,他说比第3个人大2岁;问第三个人,又说比第2人大两岁;问第2个人,说比第一个人大两岁;最后问第一个人,他说是10岁;请问第五个人多大1.程序分析:利用递归的方法,递归分为回推和递推两个阶段;要想知道第五个人岁数,需知道第四人的岁数,依次类推,推到第一人10岁,再往回推;2.程序源代码:include"stdio.h"include"conio.h"agenintn;{intc;ifn==1c=10;elsec=agen-1+2;returnc;}main{printf"%d",age5;getch;}===========================================程序29题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字;1.程序分析:学会分解出每一位数,如下解释:这里是一种简单的算法,师专数002班赵鑫提供2.程序源代码:include"stdio.h"include"conio.h"main{longa,b,c,d,e,x;scanf"%ld",&x;a=x/10000;/分解出万位/b=x%10000/1000;/分解出千位/c=x%1000/100;/分解出百位/d=x%100/10;/分解出十位/e=x%10;/分解出个位/ifa=0printf"thereare5,%ld%ld%ld%ld%ld\n",e,d,c,b,a;elseifb=0printf"thereare4,%ld%ld%ld%ld\n",e,d,c,b;elseifc=0printf"thereare3,%ld%ld%ld\n",e,d,c;elseifd=0printf"thereare2,%ld%ld\n",e,d;elseife=0printf"thereare1,%ld\n",e;getch;}===========================================程序30题目:一个5位数,判断它是不是回文数;即12321是回文数,个位与万位相同,十位与千位相同;1.程序分析:同29例2.程序源代码:include"stdio.h"include"conio.h"main{longge,shi,qian,wan,x;scanf"%ld",&x;wan=x/10000;qian=x%10000/1000;shi=x%100/10;ge=x%10;ifge==wan&&shi==qian/个位等于万位并且十位等于千位/printf"thisnumberisahuiwen\n";elseprintf"thisnumberisnotahuiwen\n";getch;}.:.:经典c程序100例==31--40:.:.经典c程序100例==31--40程序31题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母;1.程序分析:用情况语句比较好,如果第一个字母一样,则判断用情况语句或if语句判断第二个字母;2.程序源代码:include"stdio.h"include"conio.h"voidmain{charletter; printf"pleaseinputthefirstletterofsomeday\n"; whileletter=getch='Y'/当所按字母为Y时才结束/ {switchletter{case'S':printf"pleaseinputsecondletter\n"; ifletter=getch=='a'printf"saturday\n";elseifletter=getch=='u'printf"sunday\n";elseprintf"dataerror\n";break;case'F':printf"friday\n";break;case'M':printf"monday\n";break;case'T':printf"pleaseinputsecondletter\n"; ifletter=getch=='u'printf"tuesday\n";elseifletter=getch=='h'printf"thursday\n";elseprintf"dataerror\n";break;case'W':printf"wednesday\n";break;default:printf"dataerror\n";}}getch;}=========================================== 1.求下列分段函数的值;2.求下列分段函数的值;a、b由键盘输入3.求分段函数的值4.求分段函数的值⎪⎩⎪⎨⎧<=>+=0ln 01012X x X X e Y x5.计算:s=1+1/1+1/2+……+1/n,其中n 由键盘输入;6.用台劳级数求e 的近似值,直到最后一项小于10-6e=1+1/1+1/2+1/3+……7.求s=1-2+3-4+5……+99-1008.输出200~1000之间能被7整除的数,并统计其个数;9.任意输入100个整数,分别统计其中的正数、负数和零的个数;10.任意输入N 个数,统计其中的正数个数和负数个数;11.任意输入aNN 个数,找出并输出其中的最大数和最小数,以及它们的下标;12.求数组a88中,主对角线和次对角线上各元素之和;13.任意输入N 个数,将它们由大到小排序输出;14.编程打印下列的杨辉三角形;设10行11112113311464115101051……15.以“”为字符,打印一个正三角形;16.以“”为字符,打印一个6行的倒正三角形;17.打印10~1000之间满足下列条件的所有数:正序读和反序读都相同,例如:55、232等;18.从键盘任意输入一个大于0且小于1000的整数,然后输出此整数的所有整数因子;例如:输入12,输出1,2,3,4,6,12;19.编写一个函数,将字符串中的元音字母输出;例如字符串为“boyandgirl”,则输出为:oai20.从键盘上任意输入一个字符串S,输出其中的数字字符;例如输入为:sd12we$55abc8,则输出结果为:1255821.编写一个函数,将两个字符串连接起来;不能用strcat函数;22.编写一个函数:完成判断方阵aNN是否关于主对角线对称相等,若对称则返回1,否则返回0;23.输入10个学生包括姓名和成绩的信息,找出成绩最高的,然后输出该学生的姓名和成绩;24.输入10个学生包括姓名、计算机、英语的信息,找出二门课的平均成绩最高的学生,然后输出该学生的姓名和成绩;25.函数intaddintaNN,intbN的功能是将a数组中每行的最小元素放入b数组中,编写该函数实现之;26.函数intaddintaNN,intbN的功能是将a数组中每行的最大元素放入b数组中,编写该函数实现之;27.函数intaddintaNN,intbN的功能是将a数组中每列的最小元素放入b数组中,编写该函数实现之;28.编写一函数:intsubstringcharstr,charsub,判断字符串sub是否是字符串str的子串,若是子串,则返回子串的位置,否则返回-1;29.函数voidcompchars1,s2的功能是比较字符串s1和字符串s2,若字符串s1大于字符串s2,则函数返回1,若字符串s1等于字符串s2,则函数返回0,若字符串s1小于字符串s2,则函数返回-1;要求:不能调用库函数strcmp30.函数voiddelechars的功能是删除字符串s中的所有数字字符和非字母字符,并将字符串压缩;例如原字符串为:abc12ef5ghij8%%yz,处理后的字符串为:abcefghijyz;。
C语言穷举法经典例题
令z=100-x-y 1%)
只进行101×101= 10201 次运算(前者的
第3章 程序控制结构
第3章 程序控制结构
继续优化
void main() 取x<=14,y<=25 只进行 { 15×26= 390 次运算 int x,y,z; for (x=0;x<=14;x++) for (y=0;y<=25;y++) if (7*x+4*y==100 ) { z=100-x-y; printf("cocks=%d,hens=%d,chickens=%d\n",x,y,z); } }
第3章 程序控制结构
百元买百鸡问题分析
void main() 结果:x=0,y=25,z=75 { x=4,y=18,z=78 int x,y,z; x=8,y=11,z=81 for (x=0;x<=100;x++) x=12,y=4,z=84 for (y=0;y<=100;y++) for (z=0;z<=100;z++) { if (z%3==0 &&x+y+z==100 && 5*x+3*y+z/3==100 ) printf("x=%d,y=%d,z=%d\n",x,y,z); } }
第3章 程序控制结构
穷举法求解韩信点兵
#include <stdio.h> void main() { int x; for (x=1; ;x++) { if (x%5==1 && x%6==5 && x%7==4 && x%11==10) { printf(" x = %d\n", x); } } } /*死循环——永远不会退出的循环*/
