整数翻转,99乘法表,百钱买百鸡
1 #include <stdio.h> 2 /* 3 循环练习题 4 */ 5 int main(void) 6 { 7 /* 8 //题目1:打印99乘法表 9 //思路:观察乘法表:1.每行打印的列数等于行号(例如:第一行,1列,第二行2列) 所以内循环的终止条件:j<=i; 10 // 2.起始位置:i =1 ,j = 1; 11 // 总结:外层循环决定起始位置,内层循环决定打印方向。 12 13 int i,j; 14 15 for(i = 1;i<10;i++) 16 { 17 for(j = 1;j<=i;j++) 18 { 19 printf("%d*%d = %d ",j,i,i*j); 20 } 21 putchar(10); 22 } 23 */ 24 25 26 //题目2:分别用 while 和 do while 实现将输入的整数翻转输出。 比如,输出 12345,输出 54321。 27 // 思路:首先整数必须为正数,即没有符号。其次:取出个位打印,然后去掉个位.循环后再次取出个位打印。直至为0退出循环。 28 29 30 /* 31 //方法一:用while + goto实现 32 int val,r_digit; 33 val = 0; 34 printf("请输入正整数,退出输入q:\n"); 35 gogogo: while(scanf("%d",&val) == 1&& val>0) 36 { 37 while(val) 38 { 39 r_digit = val%10; 40 printf("%d",r_digit); 41 val /=10; 42 } 43 putchar(10); 44 printf("请输入正整数,退出输入q:\n"); 45 } 46 getchar();//接收scanf读取失败的一个字符。 47 if(val<0) 48 { 49 printf("请输入正整数\n"); 50 goto gogogo; 51 } 52 */ 53 /* 54 //方法二:用 do while +goto 实现 55 int val,r_digit; 56 val = 0; 57 printf("请输入正整数,退出输入q:\n"); 58 gogogo: while(scanf("%d",&val) == 1&& val>0) 59 { 60 do 61 { 62 r_digit = val%10; 63 printf("%d",r_digit); 64 val /=10; 65 }while(val); 66 putchar(10); 67 printf("请输入正整数,退出输入q:\n"); 68 } 69 getchar();//接收scanf读取失败的一个字符。 70 if(val<0) 71 { 72 printf("请输入正整数\n"); 73 goto gogogo; 74 } 75 */ 76 77 /* 78 //第三题:百钱买百鸡的问题: 中国古代数学家张丘建在他的《算经》中提出了著名的“百钱买百鸡问题”: 79 // 鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问翁、母、雏各几何? 80 //思路: i,j,k 分别代表鸡翁,鸡母,鸡雏。 81 // 1.如果买最少 鸡雏最少买三只,其他都可以买一只 82 // 2.如果买最多 全部买鸡翁 可买20只。全部买鸡母能买33只,余1钱。全部买而鸡雏最多可买100只(限制只能买百鸡) 83 // 3.确定好鸡翁和鸡母那么鸡雏的数量就确定了。所以有:k = 100-(i+j); 84 // 4.以上分析有等式 : 5*i+3*j+i/3 = 100(一共花100钱),i+j+k = 100(一共买100只鸡),k%3 == 0(鸡雏最少买三只) 这3个条件同时满足就是要的结果。 85 int i,j,k; 86 for(i = 0;i<=20;i++) 87 { 88 for(j = 0;j<=33;j++) 89 { 90 k = 100 -(i+j); 91 if(k%3 == 0 && 5*i+3*j+k/3 == 100&&i+j+k ==100) 92 printf("%d,%d,%d\n",i,j,k); 93 } 94 } 95 */ 96 return 0; 97 }