for循环:格式
for(表达式1;表达式2;表达式3)
{
语句
}
难点:枚举法的应用。
eg1:有5个运动员参加10米短跑,有人让他们预测比赛结果
A选手说:B第一,我第三
B说:我第二,E第四
C说:我第一,D第二
D说:C最后,我第三
E说:我第四,A第一。
最后比赛结果出来了,每位选手都说对了一半,请编程求出比赛结果。
#includevoid main()
{
int A,B,C,D,E;
for(A=1;A<=5;A++)
for(B=1;B<=5;B++)
for(C=1;C<=5;C++)
for(D=1;D<=5;D++)
for(E=1;E<=5;E++)
if(
B==1||A==3
&&B==2||E==4
&&C==1||D==2
&&C==5||D==3
&&E==4||A==1
)
printf("A:%d B%d C%d D%d E%d\n",A,B,C,D,E);
}
注意:逻辑思维;
注重方法积累
eg2猴子吃桃:猴子第一天的时候摘了若干个桃子,当即吃了一半多一个,第二天又吃了剩下的一半多一个,以后每天都吃剩下的一半多一个,等到第6天想吃桃子的时候,发现只剩下一个,问第一天一共摘了多少个桃子。
分析:
6: 1 5:(1+1)*2 4:(4+1)*2 3:(10+1)*2 2:(22+1)*2 1:(46+1)*2
#include <stdio.h>
void main()
{
int d,n=1;
for(d=5;d>=1;d--)
n=(n+1)*2;
printf("n=%d\n",n);
}
eg3百钱买百鸡:一百块买一百鸡,3/公,2/母,2只/块。
问:怎样一百块钱买一百只鸡。
#include <stdio.h>
void main()
{
int g,m,x;
for(g=1;g<=33;g++)
for(m=1;m<=50;m++)
{
x=100-g-m;
if((3*g+2*m+x/2==100) && x%2==0)
printf("g:%d m:%d x:%d\n",g,m,x);
}
}
注意:同36块砖36个人。
eg4有一个八层妖塔,每一层的妖怪都是上一层的2倍,一共有765个妖怪,问,第一层和最后一层分别有多少个妖怪
#include<stdio.h>
void main()
{
int m=1,n=1,i,sum;
for(n=1;n<10;n++)
{
m=n;
sum=n;
for(i=7;i<=1;i--)
{
m=m*2;
sum=sum+m;
}
if(sum==765)
{
printf("m=%d n=%d\n",m,n);
break;
}
}
}
eg5统计从键盘输入的有效字符的个数,就是第一个空格键之前的字符,如果没有空格符,就是回车之前的所有字符。
#include<>
void main()
{
char c;
int i=0;
while(getchar()!='\n')
{
if(c==' ')
break;
i++;
}
printf("%d\n",i);