博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU ACM【1001~1004】
阅读量:5281 次
发布时间:2019-06-14

本文共 4561 字,大约阅读时间需要 15 分钟。

  其实我有很多同学从大一的时候就开始做ACM题目了,我自己也曾做过几次,但总是会由于某些原因没有坚持下去!【或者是因为感觉题目太难不适合自己;或者是因为感觉题目要求的过于苛刻,不想再上面花费太多的精力和时间;或者是眼前总有一些更重要的事情要去做;又或者是自己的懒惰懒惰懒惰... ...】,这次我想向很多同学学习一下,把自己做的题目贴出来,也算是对自己的一种鞭策吧... ...

View Code
1 //1001  2 #include 
3 using namespace std; 4 int main(){
5 int num, sum; 6 while(cin >> num){
7 if(0 == num % 2) 8 sum = num / 2 * (1 + num); //必须这么写,不能写成num*(1+num)/2,因为题目只是说结果在32bit之内,但(1+n)*n很可能超出32bit 9 else 10 sum = (1 + num) / 2 * num; 11 printf("%d\n\n", sum); 12 } 13 return 0; 14 } 15 16 //提高C编程的效率方式其中一个:能用数学公式的要用数学公式! 17 //而不要用for循环进行累加的方法

 

View Code
1 //1002  2 #include 
3 #include
4 using namespace std; 5 6 int main(){
7 int T; 8 char arr1[1000], arr2[1000], out[1000]; 9 cin >> T; 10 int i = 0, j, k, l, c; 11 while(i < T){
12 cin >> arr1 >> arr2; 13 j = strlen(arr1); 14 k = strlen(arr2); 15 c = 0; 16 l = 0; 17 while( (j > 0) && (k > 0) ){
18 out[l++] = ( (arr1[--j] - 48 + arr2[--k] - 48 + c) % 10 + 48); 19 c = (arr1[j] - 48 + arr2[k] - 48 + c) / 10; 20 } 21 if( (j <= 0) && (k > 0) ){
22 while(--k >= 0){
23 out[l++] = (arr2[k] - 48 + c) % 10 + 48; 24 c = (arr2[k] - 48 + c) / 10; 25 } 26 }else if( (k <= 0) && (j > 0) ){
27 while(--j >= 0){
28 out[l++] = ( arr1[j] - 48 + c) % 10 + 48; 29 c = (arr1[j] - 48 + c) / 10; 30 } 31 } 32 if(c == 0) 33 l--; 34 else 35 out[l] = '1'; 36 cout << "Case " << i + 1 << ":" << endl; 37 cout << arr1 << " + " << arr2 << " = " ; 38 for(c = l; c >= 0; --c) 39 cout << out[c]; 40 ++ i; 41 if(i < T) //输出的时候一定要注意:什么时候输出换行!输出几个换行! 42 cout << endl << endl; 43 else 44 cout << endl; 45 } 46 return 0; 47 }

 

1 //1003  2 //题目中虽然用数组的形式描述了题目,但其实所输入的内容是可以不用存储的,可以不用存储的地方就不要存储!一定要注意!  3 #include 
4 using namespace std; 5 6 int main(){
7 int T, N, j, index, start, end, i = 0; 8 int thisum, sum, num; 9 10 cin >> T; 11 while(i < T){
12 cin >> N; 13 j = 0; 14 start = end = thisum = 0; 15 sum = -999999999; //初值不能设为,因为如果是负数的话就会求不出最优子序列。在这儿纠结了差不多一个晚上! 16 index = 0; 17 while(j < N){
18 cin >> num; 19 thisum += num; 20 if(thisum > sum){
21 sum = thisum; 22 start = index; 23 end = j; 24 } 25 if(thisum < 0){
26 thisum = 0; 27 index = j + 1; 28 } 29 ++j; 30 } 31 cout << "Case " << i + 1 << ":" << endl; 32 cout << sum << " " << start + 1<< " " << end + 1<< endl; 33 ++i; 34 if(i < T) 35 cout << endl; 36 } 37 return 0; 38 }

 

View Code
1 //1004  2 #include 
3 #include
4 using namespace std; 5 6 int main(){
7 int N, i, j, k; 8 string * arr1; 9 string str; 10 int * arr2; 11 while(cin >> N){
12 if(N == 0) 13 break; 14 k = 0; 15 arr1 = new string[N]; 16 arr2 = new int[N]; 17 memset(arr1, 0, N * sizeof(string)); 18 memset(arr2, 0, N * sizeof(int)); //不能写为sizeof(arr2),因为arr2为整型指针,使用sizeof(arr2)编译器会认为其大小恒为4,记住以后用memset就用这种方法 19 i = 0; 20 while(i < N){
21 cin >> str; 22 for(j = 0; j < N; ++j){
23 if(str == arr1[j]){
24 arr2[j]++; 25 break; 26 } 27 } 28 if(j == N){
29 arr1[k] = str; 30 arr2[k]++; 31 ++k; 32 } 33 ++i; 34 } 35 int max, index; 36 for(i = 1, max = arr2[0],index = 0; i < N; ++i){
37 if(max < arr2[i]){
38 max = arr2[i]; 39 index = i; 40 } 41 } 42 cout << arr1[index] << endl; 43 delete[] arr1; 44 delete[] arr2; 45 } 46 return 0; 47 }

转载于:https://www.cnblogs.com/lxw0109/archive/2012/03/12/HDU_ACM_1001__1004.html

你可能感兴趣的文章
ios中webservice报文的拼接
查看>>
Power BI 报告的评论服务支持移动设备
查看>>
MySQL 5.7社区版安装实践
查看>>
vue-auto-focus: 控制自动聚焦行为的 vue 指令
查看>>
docker入门学习(四) 安装nginx及配置
查看>>
有人物联网数传终端设备在智慧电力和公共事业中的应用
查看>>
《剑指offer》第三_二题(不修改数组找出重复的数字)
查看>>
windows 核心编程第一章:关于错误
查看>>
好设计,迁移不费劲
查看>>
orz gzy
查看>>
JAVA源码分析------锁(1)
查看>>
HDU 4920 Matrix multiplication
查看>>
ACdream 1068
查看>>
会声会影毛玻璃制作
查看>>
HDU 2665 Kth number
查看>>
CodeChef DGCD Dynamic GCD
查看>>
记叙在人生路上对你影响最大的三位老师
查看>>
002.大数据第二天
查看>>
python装饰器
查看>>
树上的路径
查看>>