NOIP 2017普及组复赛C/C++详细题解报告

我会带着你远行 2022-05-08 08:48 556阅读 0赞

一、题目

https://wenku.baidu.com/view/f3fe5a326ad97f192279168884868762cbaebb71.html?from=search

二、题解

第1题

这题很简单,因为输入的三个数都是十的整数倍,所以计算结果不会有小数。

  1. #include <cstdio>
  2. int main()
  3. {
  4. FILE *fp1 = fopen("score.in", "r");
  5. FILE *fp2 = fopen("score.out", "w");
  6. int a, b, c, ans;
  7. fscanf(fp1, "%d %d %d", &a, &b, &c);
  8. ans = a / 5 + b * 3 / 10 + c / 2;
  9. fprintf(fp2, "%d\n", ans);
  10. fclose(fp1);
  11. fclose(fp2);
  12. return 0;
  13. }

欲购完整答案请加微信307591841

第2题

(1)n <= 1000,则用冒泡排序的话,最多计算次数为1000 * 1000 = 100万,复杂度没有问题。
(2)所有的图书编码和需求码均不超过1000万,用整型存储即可。

  1. #include<stdio.h>
  2. #include<math.h>
  3. //using namespace std;
  4. int n,q;
  5. int a[1010];
  6. void bubble_sort(int a[], int n)
  7. {
  8. for(int round = 0; round < n - 1; round++)
  9. {
  10. for(int pos = 0; pos < n - round - 1; pos++)
  11. {
  12. if(a[pos] > a[pos + 1])
  13. {
  14. a[pos] ^= a[pos + 1];
  15. a[pos + 1] ^= a[pos];
  16. a[pos] ^= a[pos + 1];
  17. }
  18. }
  19. }
  20. }
  21. int main()
  22. {
  23. freopen ("librarian.in", "r", stdin);
  24. freopen ("librarian.out", "w", stdout);
  25. scanf ("%d %d", &n, &q);
  26. for (int i = 0; i < n; i++)
  27. {
  28. scanf("%d", &a[i]);
  29. }
  30. bubble_sort(a, n);
  31. for (int i = 0; i < q; i++)
  32. {
  33. int l, x;
  34. bool flag = 0;
  35. scanf("%d %d", &l, &x);
  36. int t = pow(10, l); //计算t,即末尾0的个数
  37. for(int i = 0; i < n; i++)
  38. {
  39. if (0 == (a[i] - x) % t) //重点:若x是a[i]的尾数,那么(a[i]-x)%t==0
  40. {
  41. flag = 1;
  42. printf("%d\n", a[i]);
  43. break;
  44. }
  45. }
  46. if (!flag)
  47. {
  48. printf("-1\n");
  49. }
  50. }
  51. return 0;
  52. }

信息学学习、算法答疑请加微信307591841

发表评论

表情:
评论列表 (有 0 条评论,556人围观)

还没有评论,来说两句吧...

相关阅读