HDU——算法练习1000 1089-1096
全篇都是讲数字之间的运算的:
由上自下难度逐渐升级 ,没耐心者建议一拉到底:
1000:
搜到的答案1000.1:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include <stdio.h> int main() { int a,b; while(scanf("%d %d",&a,&b)!=EOF) { printf("%d\n",a+b); } return 0; }
我的代码1000.2:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include<stdio.h> #include <stdlib.h> int main() { int a=0,b=0; int sum = 0; scanf_s("%d %d", &a,&b); sum = a + b; printf("%d", sum); return 0; }
小结:可以把自己的代码简化 ,如1000.2中的sum求和可以省略直接用printf进行输出。
1089:
Your task is to Calculate a + b.
Input
The input will consist of a series of pairs of integers a and b, separated by a space, one pair of integers per line.
搜的代码1089.1:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include<stdio.h> int main() { int a, b; while (scanf_s("%d %d", &a, &b) != EOF) // 输入结束时,scanf函数返回值为EOF,即没有数据输入时则退出while循环 printf("%d\n", a + b); return 0; //返回值为0 }
我的代码1089.2:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include<stdio.h> #include <stdlib.h> int main() { int a=0,b=0,c=0,d=0; int sum = 0,sumo=0; scanf_s("%d %d", &a,&b); getchar(); scanf_s("%d %d", &c, &d); sum = a + b; sumo = c + d; printf("%d\n%d", sum,sumo); return 0; }
小结:这里很蠢:我以为题目的意思是连续输入两行,然后连续输出结果,有了代码1089.2.
但是实际上output:For each pair of input integers a and b you should output the sum of a and b in one line, and with one line of output for each line in input.的意思是,每输入一行后面就要接一行output,审题不明确。
1090:
Your task is to Calculate a + b.
搜的代码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include<stdio.h> 2 3 int main(void) 4 { 5 int a=0,b=0,N=0,i=0; 6 scanf("%d\n",&N); 7 while(i<N) 8 { 9 scanf("%d%d",&a,&b); 10 printf("%d\n",a+b); 11 i++; 12 } 13 return 0; 14 }
我的代码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include<stdio.h> 2 int main() 3 { 4 int n,a, b; 5 scanf_s("%d",&n); 6 while (scanf_s("%d %d", &a, &b) != EOF) // 输入结束时,scanf函数返回值为EOF,即没有数据输入时则退出while循环 7 printf("%d\n", a + b); 8 return 0; //返回值为0 9 }
小结:变式多了一个在最开始加一个式子总数的输入,1090.2没有使用到这个总数,而1090.1使用到了这个总数,用while(N--)控制。。
1091:
搜到的代码1091.1:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include<stdio.h> 2 int main() 3 { 4 int a, b; 5 while (scanf_s("%d%d", &a, &b) == 2) 6 { 7 if (a == 0 && b == 0) break; 8 else printf("%d\n", a + b); 9 } 10 return 0; 11 }
我的代码1091.2:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include<stdio.h> 2 int main() 3 { 4 int a, b; 5 int i = 0; 6 while (i != -1) 7 { 8 scanf_s("%d%d", &a, &b); 9 if (a == 0 && b == 0) 10 return 0; 11 else 12 printf("%d\n", a + b); 13 i++; 14 15 } 16 }
小结:这个变式我从代码1091.1发现可以通过scanf(***)==n来控制每一组元素的个数,如果scanf设置为n,那么vs会按照输入端输入的值依次选取n个值进行操作(比如:设置n=2,即使键盘输入第一行三个数a1,a2,a3,回车运行,得到的答案依旧是对a1,a2进行操作的结果,接着在输入一行a4,a5,那么结果输出的是对a3,a4操作的结果),有助于进行严格的操作。当然如果不进行设置n值,scanf(****),那么vs会操作每一行相应的元素,不会涉及到上一行。
1092:
搜的代码1092.1:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include<stdio.h> 2 int main() 3 { 4 int n,m,i,sum; 5 while(scanf("%d",&n)!=EOF) 6 { 7 if(n==0) 8 break; 9 sum=0; 10 for(i=0;i<n;i++) 11 { 12 scanf("%d",&m); 13 sum+=m; 14 } 15 printf("%d\n",sum); 16 } 17 return 0; 18 }
我的代码1092.2:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
小结:我发现循环这一部分用while表达式:“while(n--)”做判断句挺好的,如果n自减到0退出循环,不然就继续循环,相当于:“for(i=n;i>0;i--)”
1093:
搜的代码1093.1:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include <stdio.h> 2 #include <stdlib.h> 3 #define max 100 4 int main() 5 { 6 int x, i, j, n; 7 scanf_s("%d", &x); 8 for (j = 0; j < x; j++) 9 { 10 scanf_s("%d", &n); 11 int s = 0, a[max]; 12 for (i = 1; i <= n; i++) 13 scanf_s("%d", &a[i]); 14 15 for (i = 1; i <= n; i++) 16 s = s + a[i]; 17 printf("%d\n", s); 18 if (j != x - 1)printf("\n"); 19 } 20 return 0; 21 }
我的代码1093.2:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include<stdio.h> 2 int main() 3 { 4 int n,m; 5 int a, sum=0; 6 scanf_s("%d", &m); 7 while (m--) 8 { 9 scanf_s("%d", &n); 10 { 11 while (n--) 12 { 13 scanf_s("%d", &a); 14 sum += a; 15 } 16 printf("%d", sum); 17 } 18 } 19 return 0; 20 }
小结:1093.1使用的数组做的,嗯可能是vs版本的问题吧(我用的2017) ,搜到的的代码都会有报错,然后加了个#define max 100,然后能正常运行。
1094:
搜的代码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
我的代码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
小结:忘记了多行输入的判断方法了:scanf_s("***")!=EOF,然后就扔下了一天。。。说一下EOF:
"EOF 是end of file的缩写 。
在用函数读入文件数据的时候,函数总会返回一个状态,是读取成功还是失败,那么这个状态怎么表示呢,所以就约定俗成定义一个标识符表示这个状态,就有了EOF。
scanf函数只有在第一个参数为NULL(空指针)的情况下,才可能返回EOF,否则,返回成功格式化并赋值的参数个数(>=0)。
所以,这个循环,将是一个死循环。"
我太喜欢这个循环了
1095:
我的代码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include<stdio.h> 2 int main() 3 { 4 int i,a,b,sum=0; 5 while (scanf_s("%d %d", &a,&b) != EOF) 6 { 7 printf("%d\n\n",a+b); 8 } 9 return 0; 10 }
1096:
Your task is to calculate the sum of some integers.
我的代码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include<stdio.h> int main() { int i,n,m; scanf_s("%d", &n); while(n--) { scanf_s("%d", &i); int sum = 0; while (i--) { scanf_s("%d",&m); sum += m; } printf("%d\n\n", sum); } return 0; }
全篇总结:
不足 :计划上应该是两天练完的,但是我搞了四天,属实是懒
学到了:1.我能灵活的使用循环语句,尤其是while(n--),真好用,推荐;
2.让文段循环下去的EOF的使用
3.不至于太生疏的使用数组,写入数据和读出数据
最后,武汉加油!白衣天使们加油!