|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 不爱听课的同学 于 2020-11-17 12:24 编辑
自己找了快速输入的代码,但算法过程太慢超时了,看了一下答案不懂为什么答案比较快
自己的超时代码
- #include <iostream>
- using namespace std;
- inline void scan_d(int* num) //快速输入函数代码
- {
- char in;
- in = getchar();
- if (in == EOF) return;
- while (in != '-' && (in < '0' || in>'9')) in = getchar();
- if (in == '-') { *num = 0; }
- else *num = in - '0';
- while (in = getchar(), in >= '0' && in <= '9') {
- *num *= 10, * num += in - '0';
- }
- return;
- }
- int main()
- {
- int N, score, q[12] = {0};
- scan_d(&N);
- for (int i = 1;i <= N;i++) {
- scan_d(&score);
- q[score/10]+=1; //计算分数余数并增加改分数段人数
- }
- cout << q[10] + q[9]<<' ' << q[8]<< ' ' << q[7]<< ' ' << q[6]<<' ' << q[5] + q[4] + q[3] + q[2] + q[1]+q[0];
- }
复制代码
答案代码
- int a[120];
- int main()
- {
- int A = 0, B = 0, C = 0, D = 0, E = 0;
- int N = 0, score, i = 0;
- scan_d(&N);
- for (i = 1; i <= N; i++)
- {
- scan_d(&score);
- a[score]++;
- }
- i = 0;
- for (; i < 60; i++)
- E += a[i];
- for (; i < 70; i++)
- D += a[i];
- for (; i < 80; i++)
- C += a[i];
- for (; i < 90; i++)
- B += a[i];
- for (; i <= 100; i++)
- A += a[i];
- printf("%d %d %d %d %d", A, B, C, D, E);
- return 0;
- }
复制代码
其他部分一样,所以没打出来
疑问,为什么用if选择结构处理更快
本帖最后由 xieglt 于 2020-11-17 10:48 编辑
除法的本质是循环减法
125/25 = 5 表达的意思 125 按每份 25 来分可以平均分成 5 份
计算方法是
125-25 = 100 count = 1
100-25 =75 count = 2
75-25 = 50 count = 3
50-25 = 25 count = 4
25-25 =0 count = 5
所以125/25=5
计算机不会列竖式试商。
|
|