经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C 语言 » 查看文章
12.2训练心得
来源:cnblogs  作者:Trirabbits三兔  时间:2018/12/3 19:15:49  对本文有异议

题目

Stat Origin Title Problem Title
Solved A HDU 1161 Eddy's mistakes
Solved B HDU 1406 完数
Solved C HDU 1097 A hard puzzle
Solved D HDU 1001 Sum Problem
Solved E HDU 1019 Least Common Multiple
Solved F HDU 1108 最小公倍数
Solved G HDU 1008 Elevator

A题

? 没什么难度了,用的ctype里面的tolower函数遍历一遍就解决了

AC代码:

  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<ctype.h>
  4. int main()
  5. {
  6. char a[1000+100];
  7. int i;
  8. while(gets(a) != NULL)
  9. {
  10. for( i = 0; i < strlen(a); i++)
  11. {
  12. if( a[i] >= 'A' && a[i] <= 'Z')
  13. a[i] = tolower(a[i]);
  14. }
  15. puts(a);
  16. }
  17. return 0;
  18. }

B题

? 其实也没什么难度,为了减少时间复杂度,用了math的sqrt函数,然后再取模判断就ok了,有一个小坑点,就是输入的M,N没有固定大小顺序,也许先输入的比后输入的大。

AC代码:

  1. #include<stdio.h>
  2. #include<math.h>
  3. int main()
  4. {
  5. int t;
  6. int m, n;
  7. int i, j;
  8. int temp;
  9. scanf("%d", &t);
  10. while(t--)
  11. {
  12. scanf("%d%d", &m, &n);
  13. if( m > n)
  14. {
  15. temp = m;
  16. m = n;
  17. n = temp;
  18. }
  19. int count = 0;
  20. for( i = m; i <= n; i++)
  21. {
  22. int sum = 1;
  23. for( j = 2; j <= sqrt(i); j++)
  24. {
  25. if( i % j == 0)
  26. {
  27. sum += j + i/j;
  28. if( j == i/j)
  29. sum -= i/j;
  30. }
  31. }
  32. if( sum == i)
  33. count++;
  34. }
  35. printf("%d\n", count);
  36. }
  37. return 0;
  38. }

C题

? 这道题其实不想让我这个菜鸡过的,但是这道题有个巧妙方法完美避开了使用快速幂算法,那就是万能无敌的找规律??????。

? 我们这样做,先把2进行各种次方

  1. 2 2^1 | 32 2^5 | 512 2^9
  2. 4 2^2 | 64 2^6 | 1024 2^10
  3. 8 2^3 | 128 2^7 | 2048 2^11
  4. 16 2^4 | 256 2^8 | 4096 2^12

? 会神奇的发现,2^1与2^5与2^9最后一位都是2.依次类推‘3’也会发现相同律。10以上的就不用推了,显而易见,12的平方也也有如此规律,而且尾数和2的也巧妙的相同,这个规律应该是有某位著名数学家发现了,有知道的朋友,评论区给我补一下知识。

AC代码:

  1. #include<stdio.h>
  2. #include<math.h>
  3. int main()
  4. {
  5. int x, y;
  6. int sum;
  7. while(~scanf("%d%d", &x,&y))
  8. {
  9. x %= 10;
  10. y %= 4;
  11. if( y%4 == 0)
  12. y = 4;
  13. sum = pow(x,y);
  14. printf("%d\n", sum%10);
  15. }
  16. return 0;
  17. }

PS:以后学了快速幂算法回来补上这一题。

D题

? 额,这个题不知道怎么说,高斯公式很巧妙,不会高斯的话直接暴力枚举。这个题有个小坑点,因为是英文题,所以很容易忽视,就是格式问题。

AC代码:

  1. #include<stdio.h>
  2. int main()
  3. {
  4. int n;
  5. int i;
  6. while(~scanf("%d", &n))
  7. {
  8. int sum = 0;
  9. for( i = n; i > 0; i--)
  10. sum += i;
  11. printf("%d\n\n", sum);
  12. }
  13. return 0;
  14. }

E题

? 多个数求最小公倍数,我用的欧几里得的方法求得gcd然后在算的lcm。这道题有坑点“All integers will be positive and lie within the range of a 32-bit integer.”本来问题不大,但是算最小公倍数的时候,两个一乘就超出int了。所以用long long。

AC代码:

  1. #include<stdio.h>
  2. int main()
  3. {
  4. long long a, b;
  5. long long m, n;
  6. long long t, s;
  7. long long i;
  8. scanf("%lld", &t);
  9. while( t--)
  10. {
  11. scanf("%lld", &s);
  12. scanf("%lld", &a);
  13. for( i = 1; i < s; i++)
  14. {
  15. scanf("%lld", &b);
  16. int x;
  17. m = a;
  18. n = b;
  19. while(b)
  20. {
  21. x = a%b;
  22. a = b;
  23. b = x;
  24. }
  25. a = m*n/a;
  26. }
  27. printf("%lld\n", a);
  28. }
  29. return 0;
  30. }

F题

最小公倍数,没啥讲的,用欧几里德法算gcd,再求lcm。

AC代码:

  1. #include<stdio.h>
  2. int main()
  3. {
  4. int a, b;
  5. int m, n;
  6. int t;
  7. while(~scanf("%d%d", &a, &b))
  8. {
  9. m = a;
  10. n = b;
  11. while(b)
  12. {
  13. t = a%b;
  14. a = b;
  15. b = t;
  16. }
  17. printf("%d\n", m*n/a);
  18. }
  19. return 0;
  20. }

G题

? 题目看起来很高大上其实就是算时间,上升需要6,下降4秒,在需要停留的楼层停留5秒,从第0层开始上升,结束后不需要回到底层。

AC代码:

  1. #include<stdio.h>
  2. int main()
  3. {
  4. int n;
  5. int floor[100];
  6. int i;
  7. while(~scanf("%d", &n) && n)
  8. {
  9. int sum = 0;
  10. int a = 0;
  11. for( i = 0; i < n; i++)
  12. scanf("%d", &floor[i]);
  13. for( i = 0; i < n; i++)
  14. {
  15. if( floor[i] > a)
  16. sum += (floor[i]-a)*6 + 5;
  17. else
  18. sum += (a-floor[i])*4 + 5;
  19. a = floor[i];
  20. }
  21. printf("%d\n", sum);
  22. }
  23. return 0;
  24. }
 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号