提交 80e70db5 编写于 作者: 每日一练社区's avatar 每日一练社区

add 18 exercises

上级 4b72dac3
...@@ -16,4 +16,5 @@ test.html ...@@ -16,4 +16,5 @@ test.html
./src/__pycache__/*.pyc ./src/__pycache__/*.pyc
leetcode_class.md leetcode_class.md
fix_bug.py fix_bug.py
tools.py tools.py
\ No newline at end of file lanqiao.cpp
\ No newline at end of file
...@@ -4,15 +4,7 @@ ...@@ -4,15 +4,7 @@
一次,他参加某个重要会议,年轻的脸孔引人注目。于是有人询问他的年龄,他回答说:“我年龄的立方是个4位数。我年龄的4次方是个6位数。这10个数字正好包含了从0到9这10个数字,每个都恰好出现1次。” 一次,他参加某个重要会议,年轻的脸孔引人注目。于是有人询问他的年龄,他回答说:“我年龄的立方是个4位数。我年龄的4次方是个6位数。这10个数字正好包含了从0到9这10个数字,每个都恰好出现1次。”
请你推算一下,他当时到底有多年轻。 请你推算一下,他当时到底有多年轻。
以下代码的输出中包含了该数学家的真实年龄,请你从下面四个选项中选择正确答案。
## aop
### before
```cpp
```
### after
```cpp ```cpp
#include <iostream> #include <iostream>
...@@ -30,6 +22,20 @@ int main() ...@@ -30,6 +22,20 @@ int main()
} }
``` ```
## aop
### before
```cpp
```
### after
```cpp
```
## 答案 ## 答案
```cpp ```cpp
......
...@@ -5,32 +5,12 @@ ...@@ -5,32 +5,12 @@
![](https://img-blog.csdn.net/20160125091111485) ![](https://img-blog.csdn.net/20160125091111485)
上图表示了分块乘法的原理。可以把大数分成多段(此处为2段)小数,然后用小数的多次运算组合表示一个大数。可以根据int的承载能力规定小块的大小,比如要把int分成2段,则小块可取10000为上限值。注意,小块在进行纵向累加后,需要进行进位校正。 上图表示了分块乘法的原理。可以把大数分成多段(此处为2段)小数,然后用小数的多次运算组合表示一个大数。可以根据int的承载能力规定小块的大小,比如要把int分成2段,则小块可取10000为上限值。注意,小块在进行纵向累加后,需要进行进位校正。
请从以下四个选项中选择正确答案,填补在空白处,使得代码能运行后能产生正确的结果。
## aop
### before
```cpp
#include <stdio.h>
```
### after
```cpp ```cpp
int main(int argc, char *argv[]) #include <bits/stdc++.h>
{ using namespace std;
int x[] = {0, 0, 0, 0};
bigmul(87654321, 12345678, x);
printf("%d%d%d%d\n", x[0], x[1], x[2], x[3]);
return 0;
}
```
## 答案
```cpp
void bigmul(int x, int y, int r[]) void bigmul(int x, int y, int r[])
{ {
int base = 10000; int base = 10000;
...@@ -46,98 +26,62 @@ void bigmul(int x, int y, int r[]) ...@@ -46,98 +26,62 @@ void bigmul(int x, int y, int r[])
r[3] = n1 % base; r[3] = n1 % base;
r[2] = n1 / base + n2 % base + n3 % base; r[2] = n1 / base + n2 % base + n3 % base;
r[1] = n2 / base + n3 / base + n4 % base; r[1] = __________________;
r[0] = n4 / base; r[0] = n4 / base;
r[1] += r[2] / base; r[1] += r[2] / base;
r[2] = r[2] % base; r[2] = r[2] % base;
r[0] += r[1] / base; r[0] += r[1] / base;
r[1] = r[1] % base; r[1] = r[1] % base;
} }
int main(int argc, char *argv[])
{
int x[] = {0, 0, 0, 0};
bigmul(87654321, 12345678, x);
printf("%d%d%d%d\n", x[0], x[1], x[2], x[3]);
return 0;
}
``` ```
## 选项
## aop
### A ### before
```cpp ```cpp
void bigmul(int x, int y, int r[])
{
int base = 10000;
int x2 = x / base;
int x1 = x % base;
int y2 = y / base;
int y1 = y % base;
int n1 = x1 * y1; ```
int n2 = x1 * y2; ### after
int n3 = x2 * y1;
int n4 = x2 * y2;
r[3] = n1 % base; ```cpp
r[2] = n1 / base + n2 % base + n3 % base;
r[1] = n2 / base + n3 / base + n4 % base;
r[0] = n4 / base;
r[1] += r[2] % base;
r[2] = r[2] / base;
r[0] += r[1] / base;
r[1] = r[1] % base;
}
``` ```
### B ## 答案
```cpp ```cpp
void bigmul(int x, int y, int r[]) n2 / base + n3 / base + n4 % base
{ ```
int base = 10000; ## 选项
int x2 = x / base;
int x1 = x % base;
int y2 = y / base;
int y1 = y % base;
int n1 = x1 * y1;
int n2 = x1 * y2;
int n3 = x2 * y1;
int n4 = x2 * y2;
r[3] = n1 % base; ### A
r[2] = n1 / base + n2 % base + n3 % base;
r[1] = n2 / base + n3 / base + n4 / base;
r[0] = n4 / base;
r[1] += r[2] / base; ```cpp
r[2] = r[2] % base; n2 % base + n3 / base + n4 / base
r[0] += r[1] / base;
r[1] = r[1] % base;
}
``` ```
### C ### B
```cpp ```cpp
void bigmul(int x, int y, int r[]) n2 / base + n3 % base + n4 / base
{ ```
int base = 10000;
int x2 = x / base;
int x1 = x % base;
int y2 = y / base;
int y1 = y % base;
int n1 = x1 * y1;
int n2 = x1 * y2;
int n3 = x2 * y1;
int n4 = x2 * y2;
r[3] = n1 % base; ### C
r[2] = n1 / base + n2 % base + n3 % base;
r[1] = n2 / base + n3 % base + n4 / base;
r[0] = n4 / base;
r[1] += r[2] / base; ```cpp
r[2] = r[2] % base; n2 / base + n3 / base + n4 / base
r[0] += r[1] / base;
r[1] = r[1] % base;
}
``` ```
...@@ -14,6 +14,8 @@ ...@@ -14,6 +14,8 @@
1. 总数目包含题目给出的那个示例。 1. 总数目包含题目给出的那个示例。
2. 乘数和被乘数交换后作为同一方案来看待。 2. 乘数和被乘数交换后作为同一方案来看待。
以下错误的是?
## aop ## aop
### before ### before
...@@ -21,8 +23,6 @@ ...@@ -21,8 +23,6 @@
```cpp ```cpp
#include <bits/stdc++.h> #include <bits/stdc++.h>
using namespace std; using namespace std;
int bei[10];
map<long long, int> mp;
``` ```
### after ### after
...@@ -33,15 +33,18 @@ map<long long, int> mp; ...@@ -33,15 +33,18 @@ map<long long, int> mp;
## 答案 ## 答案
```cpp ```cpp
int bei[10];
map<long long, int> mp;
int main() int main()
{ {
int a[9] = {1, 2, 3, 4, 5, 6, 7, 8, 9}; int a[9] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int res = 0; int res = 0;
do while (next_permutation(a, a + 9))
{ {
for (int i = 1; i < 9; i++) for (int i = 1; i < 9; i++)
{ {
memset(bei, 0, sizeof(bei)); memset(bei, 0, sizeof(bei));
long long int ans, left = 0, right = 0, t = 0, x = 0, y = 0; long long int ans, left = 0, right = 0, t = 0, x = 0, y = 0;
for (int j = 0; j <= i; j++) for (int j = 0; j <= i; j++)
{ {
...@@ -52,7 +55,6 @@ int main() ...@@ -52,7 +55,6 @@ int main()
for (int k = i + 1; k < 9; k++) for (int k = i + 1; k < 9; k++)
{ {
right = right * 10 + a[k]; right = right * 10 + a[k];
x = x * 10 + a[k];
} }
y = right; y = right;
y = y * 10; y = y * 10;
...@@ -61,7 +63,7 @@ int main() ...@@ -61,7 +63,7 @@ int main()
ans = left * right; ans = left * right;
long long int ff = ans; long long int ff = ans;
while (ans > 0) while (ans >= 0)
{ {
int x = ans % 10; int x = ans % 10;
ans = ans / 10; ans = ans / 10;
...@@ -71,14 +73,14 @@ int main() ...@@ -71,14 +73,14 @@ int main()
t++; t++;
} }
} }
if (t == 9 && mp.count(x) == 0 && mp.count(y) == 0) if (mp.count(x) == 0 && mp.count(y) == 0)
{ {
res++; res++;
mp[x] = 1; mp[x] = 1;
mp[y] = 1; mp[y] = 1;
} }
} }
} while (next_permutation(a, a + 9)); };
cout << res << endl; cout << res << endl;
return 0; return 0;
} }
...@@ -89,52 +91,55 @@ int main() ...@@ -89,52 +91,55 @@ int main()
### A ### A
```cpp ```cpp
const int N = 1e3 + 5;
int a[15] = {9, 2, 1, 3, 8, 5, 6, 7, 4}, res = 0, vis[12], temp1;
bool fun(int x)
{
int t1 = 0, t2 = 0;
for (int i = x, j = 1; i >= 0; i--, j *= 10)
{
t1 = a[i] * j + t1;
}
for (int i = 8, j = 1; i > x; i--, j *= 10)
{
t2 = a[i] * j + t2;
}
temp1 = t1 * t2;
int temp = temp1;
memset(vis, 0, sizeof(vis));
while (temp)
{
vis[temp % 10] = 1;
temp /= 10;
}
for (int i = 1; i <= 9; i++)
{
if (!vis[i])
return false;
}
return true;
}
int main() int main()
{ {
int a[9] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int res = 0; for (int i = 0; i < 9; i++)
while (next_permutation(a, a + 9)) a[i] = i + 1;
set<int> st;
do
{ {
for (int i = 1; i < 9; i++) for (int i = 0; i < 8; i++)
{ {
memset(bei, 0, sizeof(bei)); if (fun(i))
long long int ans, left = 0, right = 0, t = 0, x = 0, y = 0;
for (int j = 0; j <= i; j++)
{
left = left * 10 + a[j];
}
x = left;
x = x * 10;
for (int k = i + 1; k < 9; k++)
{
right = right * 10 + a[k];
}
y = right;
y = y * 10;
for (int j = 0; j <= i; j++)
y = y * 10 + a[j];
ans = left * right;
long long int ff = ans;
while (ans >= 0)
{
int x = ans % 10;
ans = ans / 10;
if (bei[x] == 0 && x != 0)
{
bei[x] = 1;
t++;
}
}
if (mp.count(x) == 0 && mp.count(y) == 0)
{ {
st.insert(temp1);
res++; res++;
mp[x] = 1;
mp[y] = 1;
} }
} }
}; } while (next_permutation(a, a + 9));
cout << res << endl; cout << res / 2 << '\n';
return 0; return 0;
} }
``` ```
...@@ -142,52 +147,66 @@ int main() ...@@ -142,52 +147,66 @@ int main()
### B ### B
```cpp ```cpp
int main() int st[10], res[10], book[10], cnt;
int cal(int l, int r)
{ {
int a[9] = {1, 2, 3, 4, 5, 6, 7, 8, 9}; int t = 0;
int res = 0; for (int i = l; i <= r; i++)
do
{ {
for (int i = 1; i < 9; i++) t = t * 10 + res[i];
{ }
memset(bei, 0, sizeof(bei)); return t;
long long int ans, left = 0, right = 0, t = 0, x = 0, y = 0; }
for (int j = 0; j <= i; j++)
{
left = left * 10 + a[j];
}
x = left;
x = x * 10;
for (int k = i + 1; k < 9; k++)
{
right = right * 10 + a[k];
x = x * 10 + a[k];
}
y = right;
y = y * 10;
for (int j = 0; j <= i; j++)
y = y * 10 + a[j];
long long int ff = ans; bool check(int k)
while (ans > 0) {
{ for (int i = 0; i < 10; i++)
int x = ans % 10; book[i] = 0;
ans = ans / 10; while (k)
if (bei[x] == 0 && x != 0) {
{ book[k % 10]++;
bei[x] = 1; k /= 10;
t++; }
} bool flag = true;
} for (int i = 1; i <= 9; i++)
if (t == 9 && mp.count(x) == 0 && mp.count(y) == 0) {
if (book[i] != 1)
flag = false;
}
return flag;
}
void dfs(int k)
{
if (k == 9)
{
for (int i = 0; i < 8; i++)
{
int a = cal(0, i);
int b = cal(i + 1, 8);
if (check(a * b))
{ {
res++; cnt++;
mp[x] = 1;
mp[y] = 1;
} }
} }
} while (next_permutation(a, a + 9)); return;
cout << res << endl; }
for (int i = 1; i <= 9; i++)
{
if (!st[i])
{
st[i] = 1;
res[k] = i;
dfs(k + 1);
st[i] = 0;
}
}
}
int main()
{
dfs(0);
cout << cnt / 2;
return 0; return 0;
} }
``` ```
...@@ -195,52 +214,87 @@ int main() ...@@ -195,52 +214,87 @@ int main()
### C ### C
```cpp ```cpp
int main() typedef long long LL;
const int N = 15;
bool vis[N];
int ans;
bool check_2(LL sumb)
{ {
int a[9] = {1, 2, 3, 4, 5, 6, 7, 8, 9}; bool st[N];
int res = 0; for (int i = 1; i <= 9; i++)
while (next_permutation(a, a + 9))
{ {
for (int i = 1; i < 9; i++) st[i] = 0;
}
while (sumb)
{
st[sumb % 10] = true;
sumb = sumb / 10;
}
bool flag = false;
for (int i = 1; i <= 9; i++)
{
if (!st[i])
{ {
memset(bei, 0, sizeof(bei)); return false;
long long int ans, left = 0, right = 0, t = 0, x = 0, y = 0; }
for (int j = 0; j <= i; j++) }
{ return true;
left = left * 10 + a[j]; }
}
x = left;
x = x * 10;
for (int k = i + 1; k < 9; k++)
{
right = right * 10 + a[k];
}
y = right;
y = y * 10;
for (int j = 0; j <= i; j++)
y = y * 10 + a[j];
ans = left * right; bool check_1(int suma, int sumc)
long long int ff = ans; {
while (ans > 0) LL sumb = (LL)suma * sumc;
{ if (check_2(sumb))
int x = ans % 10; {
ans = ans / 10; return true;
if (bei[x] == 0 && x != 0) }
{ return false;
bei[x] = 1; }
t++;
} void dfs_c(int u, int suma, int sumc)
} {
if (t == 9 && mp.count(x) == 0 && mp.count(y) == 0) if (u > 9)
{ {
res++; return;
mp[x] = 1; }
mp[y] = 1;
} if (check_1(suma, sumc))
{
ans++;
return;
}
for (int i = 1; i <= 9; i++)
{
if (!vis[i])
{
vis[i] = true;
dfs_c(u + 1, suma, sumc * 10 + i);
vis[i] = false;
} }
}; }
cout << res << endl; }
void dfs_a(int u, int suma)
{
dfs_c(u, suma, 0);
for (int i = 1; i <= 9; i++)
{
if (!vis[i])
{
vis[i] = true;
dfs_a(u + 1, suma * 10 + i);
vis[i] = false;
}
}
}
int main()
{
dfs_a(0, 0);
cout << ans / 2 << endl;
return 0; return 0;
} }
``` ```
...@@ -15,47 +15,27 @@ ...@@ -15,47 +15,27 @@
例如,有一种可能是:```20,5,4,2,0``` 例如,有一种可能是:```20,5,4,2,0```
以下错误的一项是?
## aop ## aop
### before ### before
```cpp ```cpp
#include <cstdio> #include <bits/stdc++.h>
#include <iostream>
using namespace std; using namespace std;
int d, a1[4];
``` ```
### after ### after
```cpp ```cpp
int main()
{
for (int sum = 20; sum >= 1; sum--)
{
for (int a = 1; a <= 20; a++)
{
for (int b = 1; b <= 20; b++)
{
for (int c = 1; c <= 20; c++)
{
a1[0] = sum, a1[1] = a, a1[2] = b, a1[3] = c;
if (getS(a1) == a1[0] && a > b && b > c && sum > a)
{
printf("%d, %d, %d, %d, 0\n", sum, a, b, c);
}
}
}
}
}
return 0;
}
``` ```
## 答案 ## 答案
```cpp ```cpp
int d, a1[4];
int d1(int *a1) int d1(int *a1)
{ {
int sum = a1[0]; int sum = a1[0];
...@@ -74,12 +54,31 @@ int getS(int *a1) ...@@ -74,12 +54,31 @@ int getS(int *a1)
int index = d1(a1); int index = d1(a1);
a1[0] = a1[0] * a1[index]; a1[0] = a1[0] * a1[index];
ss = a1[index]; ss = a1[index];
sum += ss;
} }
for (int i = 1; i < 4; i++) return sum;
}
int main()
{
for (int sum = 20; sum >= 1; sum--)
{ {
sum += (a1[0] / a1[i]); for (int a = 1; a <= 20; a++)
{
for (int b = 1; b <= 20; b++)
{
for (int c = 1; c <= 20; c++)
{
a1[0] = sum, a1[1] = a, a1[2] = b, a1[3] = c;
if (getS(a1) == a1[0] && a > b && b > c && sum > a)
{
printf("%d, %d, %d, %d, 0\n", sum, a, b, c);
}
}
}
}
} }
return sum + ss; return 0;
} }
``` ```
## 选项 ## 选项
...@@ -88,86 +87,99 @@ int getS(int *a1) ...@@ -88,86 +87,99 @@ int getS(int *a1)
### A ### A
```cpp ```cpp
int d1(int *a1) int main()
{ {
int sum = a1[0]; float n;
for (int i = 1; i < 4; i++) float a, b, c;
float s1, s2, s3;
for (n = 5; n <= 20; n++)
{ {
if (sum % a1[i] != 0) for (a = 1; a <= n; a++)
return i; for (b = 1; b <= n; b++)
for (c = 1; c <= n; c++)
{
s1 = n - a;
s2 = n - a - b;
s3 = n - a - b - c;
if (1 / n + 1 / s1 + 1 / s2 + 1 / s3 == 1 && s1 > 0 && s2 > 0 && s3 > 0)
cout << n << "," << s1 << "," << s2 << "," << s3 << ","
<< "0" << endl;
}
} }
return 0; return 0;
} }
int getS(int *a1)
{
int sum = 0, ss = 1;
while (d1(a1) != 0)
{
int index = d1(a1);
a1[0] = a1[0] * a1[index];
ss = a1[index];
}
for (int i = 1; i <= 4; i++)
{
sum += (a1[0] / a1[i]);
}
return sum + ss;
}
``` ```
### B ### B
```cpp ```cpp
int d1(int *a1) int cm(int a, int b)
{ {
int sum = a1[0]; int temp;
for (int i = 1; i <= 4; i++) int mul;
mul = a * b;
if (a % b == 0)
return a;
else
{ {
if (sum % a1[i] != 0) while (a % b != 0)
return i; {
temp = a % b;
a = b;
b = temp;
}
return mul * b;
} }
return 0;
} }
int getS(int *a1) int main()
{ {
int sum = 0, ss = 1; int a, b, c, d;
while (d1(a1) != 0) int temp;
{ int ta, tb, tc, td;
int index = d1(a1); for (a = 20; a >= 5; a--)
a1[0] = a1[0] * a1[index]; for (b = a - 1; b >= 4; b--)
ss = a1[index]; for (c = b - 1; c >= 3; c--)
} for (d = c - 1; d >= 2; d--)
for (int i = 1; i <= 4; i++) {
{ temp = cm(a, b);
sum += (a1[0] / a1[i]); temp = cm(temp, c);
} temp = cm(temp, d);
return sum + ss; ta = temp / a;
tb = temp / b;
tc = temp / c;
td = temp / d;
if (ta + tb + tc + td == temp)
cout << a << "," << b << "," << c << "," << d << ","
<< "0" << endl;
}
return 0;
} }
``` ```
### C ### C
```cpp ```cpp
int d1(int *a1) int main(void)
{ {
int sum = a1[0]; float a, b, c, d;
for (int i = 1; i < 4; i++) float x, y, z, m;
{ for (x = 20; x >= 5; x--)
if (sum % a1[i] != 0)
return i;
}
return 0;
}
int getS(int *a1)
{
int sum = 0, ss = 1;
while (d1(a1) != 0)
{ {
int index = d1(a1); for (y = x - 1; y >= 4; y--)
a1[0] = a1[0] * a1[index]; {
ss = a1[index]; for (z = y - 1; z >= 3; z--)
sum += ss; {
for (m = y - 1; m >= 2; m--)
{
if (y * z * m + x * z * m + x * y * m + x * y * z == x * y * z * m)
{
cout << x << "," << y << "," << z << "," << m << ","
<< "0" << endl;
}
}
}
}
} }
return sum;
} }
``` ```
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
类似:3/2 类似:3/2
当然,这只是加了前2项而已。分子分母要求互质。 当然,这只是加了前2项而已。分子分母要求互质。
下面哪一项是错误的?
## aop ## aop
### before ### before
...@@ -15,17 +16,7 @@ using namespace std; ...@@ -15,17 +16,7 @@ using namespace std;
### after ### after
```cpp ```cpp
int gcd(long a, long b)
{
if (b == 0)
return a;
return gcd(b, a % b);
}
int main()
{
cout << gcd(pow_2(20) - 1, pow_2(19)) << endl;
cout << pow_2(20) - 1 << "/" << pow_2(19) << endl;
}
``` ```
## 答案 ## 答案
...@@ -44,6 +35,17 @@ long pow_2(int b) ...@@ -44,6 +35,17 @@ long pow_2(int b)
} }
return res; return res;
} }
int gcd(long a, long b)
{
if (b == 0)
return a;
return gcd(b, a % b);
}
int main()
{
cout << pow_2(20) << "/" << pow_2(19) << endl;
}
``` ```
## 选项 ## 选项
...@@ -59,45 +61,63 @@ long pow_2(int b) ...@@ -59,45 +61,63 @@ long pow_2(int b)
{ {
if (b & 1) if (b & 1)
res *= x; res *= x;
b <<= 1; b >>= 1;
x = x * x; x = x * x;
} }
return res; return res;
} }
int gcd(long a, long b)
{
if (b == 0)
return a;
return gcd(b, a % b);
}
int main()
{
cout << pow_2(20) - 1 << "/" << pow_2(19) << endl;
}
``` ```
### B ### B
```cpp ```cpp
long pow_2(int b) int gcd(int a, int b)
{ {
long x = 2; return a % b ? gcd(b, a % b) : b;
long res = 1; }
while (b > 0)
{ int main()
if (b && 1) {
res *= x; int a = 1048575, b = 524288;
b <<= 1; int t = gcd(a, b);
x = x * x; cout << a / t << "/" << b / t << endl;
} return 0;
return res;
} }
``` ```
### C ### C
```cpp ```cpp
long pow_2(int b) int gcd(int a, int b)
{ {
long x = 2;
long res = 1;
while (b > 0) while (b > 0)
{ {
if (b & 1) int c;
res = x; c = a % b;
b >>= 1; a = b;
x = x * x; b = c;
} }
return res; return a;
}
int main()
{
int a = 1048575;
int b = 524288;
int c = gcd(a, b);
cout << a / c << "/" << b / c << endl;
return 0;
} }
``` ```
...@@ -43,14 +43,14 @@ ...@@ -43,14 +43,14 @@
71.29 71.29
``` ```
以下选项错误的是?
## aop ## aop
### before ### before
```cpp ```cpp
#include <stdio.h> #include <bits/stdc++.h>
#include <iostream>
using namespace std; using namespace std;
``` ```
### after ### after
...@@ -66,24 +66,22 @@ int main() ...@@ -66,24 +66,22 @@ int main()
{ {
int n; int n;
cin >> n; cin >> n;
int sum = 0;
int top = 0;
int low = 100;
int score; int maxv = 0, minv = 100, sum = 0;
for (int i = 0; i < n; i++) for (int i = 0; i < n; i++)
{ {
cin >> score; int x;
if (score > top) cin >> x;
top = score; minv = min(minv, x);
if (score < low) maxv = max(maxv, x);
low = score; sum += x;
sum += score;
} }
printf("%d\n%d\n%.2lf", top, low, (sum * 1.0 / n));
cout << maxv << endl;
cout << minv << endl;
printf("%.2f", sum / n);
return 0; return 0;
} }
``` ```
## 选项 ## 选项
...@@ -93,23 +91,32 @@ int main() ...@@ -93,23 +91,32 @@ int main()
```cpp ```cpp
int main() int main()
{ {
int n; int n, max = 0, min = 0;
double sum = 0, average = 0;
cin >> n; cin >> n;
int sum = 0; int a[10000];
int top = 0; cin >> a[0];
int low = 100; sum = a[0];
max = a[0];
int score; min = a[0];
for (int i = 0; i < n; i++) for (int i = 1; i < n; i++)
{ {
cin >> score; cin >> a[i];
if (score > top) if (max < a[i])
top = score; {
if (score < low) max = a[i];
low = score; }
sum += score; if (min > a[i])
{
min = a[i];
}
sum += a[i];
} }
printf("%d\n%d\n%.f", top, low, (sum * 1.0 / n)); average = sum / n;
cout << max << endl
<< min << endl
<< setiosflags(ios::fixed) << setprecision(2) << average;
return 0; return 0;
} }
``` ```
...@@ -117,25 +124,56 @@ int main() ...@@ -117,25 +124,56 @@ int main()
### B ### B
```cpp ```cpp
int n;
int Max(int m[10005])
{
int max = m[0];
for (int i = 1; i < n; i++)
{
if (max < m[i])
{
max = m[i];
}
}
return max;
}
int Min(int m[10005])
{
int min = m[0];
for (int i = 1; i < n; i++)
{
if (min > m[i])
{
min = m[i];
}
}
return min;
}
int main() int main()
{ {
int n;
cin >> n; cin >> n;
int sum = 0; int m[10005];
int top = 0; for (int i = 0; i < n; i++)
int low = 100; {
cin >> m[i];
}
int ans = 0;
int score;
for (int i = 0; i < n; i++) for (int i = 0; i < n; i++)
{ {
cin >> score; ans += m[i];
if (score > top)
score = top;
if (score < low)
score = low;
sum += score;
} }
printf("%d\n%d\n%.2lf", top, low, (sum * 1.0 / n));
int a = Max(m);
int b = Min(m);
cout << "最高分 = " << a << endl;
cout << "最低分 = " << b << endl;
printf("%.2lf", 1.0 * ans / n);
return 0; return 0;
} }
``` ```
...@@ -155,13 +193,13 @@ int main() ...@@ -155,13 +193,13 @@ int main()
for (int i = 0; i < n; i++) for (int i = 0; i < n; i++)
{ {
cin >> score; cin >> score;
if (score < top) if (score > top)
top = score; top = score;
if (score > low) if (score < low)
low = score; low = score;
sum += score; sum += score;
} }
printf("%d\n%d\n%d", top, low, (sum / n)); printf("%d\n%d\n%.2lf", top, low, (sum * 1.0 / n));
return 0; return 0;
} }
``` ```
...@@ -12,17 +12,14 @@ x星的国王有个怪癖,他只喜欢数字3,5和7。 ...@@ -12,17 +12,14 @@ x星的国王有个怪癖,他只喜欢数字3,5和7。
请你帮小明计算一下,59084709587505是第几个幸运数字。 请你帮小明计算一下,59084709587505是第几个幸运数字。
以下选项错误的是?
## aop ## aop
### before ### before
```cpp ```cpp
#include <iostream> #include <bits/stdc++.h>
#include <cmath>
#include <queue>
#include <set>
using namespace std; using namespace std;
``` ```
### after ### after
...@@ -34,34 +31,27 @@ using namespace std; ...@@ -34,34 +31,27 @@ using namespace std;
## 答案 ## 答案
```cpp ```cpp
typedef long long LL;
const LL MAX = 59084709587505;
int main() int main()
{ {
set<long long> st; int a[3] = {3, 5, 7};
priority_queue<long long, vector<long long>, greater<long long>> pq; LL tou = 1;
const int ok[3] = {3, 5, 7}; set<LL> s;
st.insert(1);
pq.push(1);
int times = 0;
while (true) while (true)
{ {
long long lucky = pq.top();
pq.pop();
if (lucky == 59084709587505)
{ //49
cout << times << endl;
return 0;
}
times++;
for (int i = 0; i < 3; i++) for (int i = 0; i < 3; i++)
{ {
long long b = lucky * ok[i]; LL tt = tou * a[i];
if (!st.count(b)) if (tt <= MAX)
{ s.insert(tt);
st.insert(b);
pq.push(b);
}
} }
tou = s.upper_bound(tou);
if (tou >= MAX)
break;
} }
cout << s.size() << endl;
return 0; return 0;
} }
``` ```
...@@ -71,34 +61,32 @@ int main() ...@@ -71,34 +61,32 @@ int main()
### A ### A
```cpp ```cpp
#define LL long long
LL maxs = 59084709587505;
set<LL> q;
int main() int main()
{ {
set<long long> st; q.insert(3);
priority_queue<long long, vector<long long>, greater<long long>> pq; q.insert(5);
const int ok[3] = {3, 5, 7}; q.insert(7);
st.insert(1); set<LL>::iterator it;
pq.push(1); it = q.begin();
int times = 0; LL mid;
while (true) while (*it <= maxs)
{ {
long long lucky = pq.top(); mid = *it;
pq.pop(); q.insert(mid * 3);
if (lucky == 59084709587505) q.insert(mid * 5);
{ //49 q.insert(mid * 7);
cout << times << endl; it++;
return 0;
}
times++;
for (int i = 0; i < 3; i++)
{
long long b = lucky * ok[i + 1];
if (!st.count(b))
{
st.insert(b);
pq.push(b);
}
}
} }
int num = 0;
for (it = q.begin(); it != q.end(); it++)
{
if (*it <= maxs)
num++;
}
cout << num;
return 0; return 0;
} }
``` ```
...@@ -106,37 +94,35 @@ int main() ...@@ -106,37 +94,35 @@ int main()
### B ### B
```cpp ```cpp
int main() typedef long long LL;
const LL Max = 59084709587505;
int a[3] = {3, 5, 7};
void Find(LL Max)
{ {
set<long long> st; set<LL> se;
priority_queue<long long, vector<long long>, greater<long long>> pq; LL t = 1;
const int ok[3] = {3, 5, 7}; while (1)
st.insert(1);
pq.push(1);
int times = 0;
while (true)
{ {
long long lucky = pq.top(); for (int i = 0; i < 3; ++i)
pq.pop();
if (lucky == 59084709587505)
{ //49
cout << times << endl;
return 0;
}
times++;
for (int i = 0; i < 3; i++)
{ {
long long b = lucky * ok[i] + 1; LL tt = t * a[i];
if (!st.count(b)) if (tt <= Max)
{ se.insert(tt);
st.insert(b);
pq.push(b);
}
} }
t = *se.upper_bound(t);
if (t == Max)
break;
} }
return 0; cout << se.size() << endl;
} }
int main(void)
{
Find(Max);
return 0;
}
``` ```
### C ### C
...@@ -155,14 +141,14 @@ int main() ...@@ -155,14 +141,14 @@ int main()
long long lucky = pq.top(); long long lucky = pq.top();
pq.pop(); pq.pop();
if (lucky == 59084709587505) if (lucky == 59084709587505)
{ //49 {
cout << times << endl; cout << times << endl;
return 0; return 0;
} }
times++; times++;
for (int i = 0; i < 3; i++) for (int i = 0; i < 3; i++)
{ {
long long b = lucky + ok[i]; long long b = lucky * ok[i];
if (!st.count(b)) if (!st.count(b))
{ {
st.insert(b); st.insert(b);
...@@ -172,5 +158,4 @@ int main() ...@@ -172,5 +158,4 @@ int main()
} }
return 0; return 0;
} }
``` ```
...@@ -12,84 +12,60 @@ ...@@ -12,84 +12,60 @@
长度为10的等差素数列,其公差最小值是多少? 长度为10的等差素数列,其公差最小值是多少?
以下选项错误的是?
## aop ## aop
### before ### before
```cpp ```cpp
#include <cstdio> #include <bits/stdc++.h>
#include <algorithm>
#include <set>
using namespace std; using namespace std;
```
### after
typedef long long LL; ```cpp
set<int> all;
bool isPrimt(LL t)
{
for (int i = 2; i < t / 2; ++i)
{
if (t % i == 0)
return false;
}
return true;
}
``` ```
### after
## 答案
```cpp ```cpp
const int N = 5000; const int N = 10010;
int main()
{
LL a[N];
a[0] = 2; int k;
a[1] = 3; int prime[N];
all.insert(2); bool st[N], check[N];
all.insert(3);
int index = 2; void init()
LL t = 5; {
while (index < N) for (int i = 2; i < N; i++)
{ if (!st[i])
if (isPrimt(t))
{ {
a[index++] = t; prime[k++] = i;
all.insert(t); check[i] = true;
for (int j = i + i; j < N; j += i)
st[j] = true;
} }
t++;
}
printf("%d\n", f(a, N));
return 0;
} }
```
## 答案
```cpp int main()
int f(LL a[], int n) {
{ init();
for (int i = 0; i < n; ++i) for (int i = 1; i < N; i++)
{ for (int j = 0; j < k; j++)
LL first = a[i]; {
for (int delta = 1; delta < a[n - 1] - first; ++delta) int k = prime[j], cnt = 1;
{ while (check[k + i])
int m = first; {
for (int j = 1; j < 10; ++j) k += i;
{ if (cnt++ == 10)
m += delta; {
if (all.find(m) == all.end()) cout << i << endl;
break; return 0;
if (m > a[n - 1]) }
break;
if (j == 9)
return delta;
} }
} }
}
return -1;
} }
``` ```
## 选项 ## 选项
...@@ -98,80 +74,171 @@ int f(LL a[], int n) ...@@ -98,80 +74,171 @@ int f(LL a[], int n)
### A ### A
```cpp ```cpp
int f(LL a[], int n) typedef long long ll;
{ const ll maxn = 1e6 + 50;
for (int i = 0; i < n; ++i) ll a[maxn];
{ bool ok(ll n, ll cha)
LL first = a[i]; {
for (int delta = 1; delta < a[n] - first; ++delta) for (ll i = 0; i < 10; i++)
{ {
int m = first; if (!a[n + i * cha])
for (int j = 1; j < 10; ++j) return 0;
{ }
m += delta; return 1;
if (all.find(m) == all.end()) }
break;
if (m > a[n - 1]) int main()
break; {
if (j == 9) a[1] = 0;
return delta; a[2] = 1;
a[3] = 1;
for (ll i = 4; i <= 1000000; i++)
{
bool flag = 0;
for (ll j = 2; j * j <= i; j++)
{
if (i % j == 0)
{
flag = 1;
break;
}
}
if (flag)
a[i] = 0;
else
a[i] = 1;
}
for (ll cha = 1;; cha++)
{
for (ll i = 2; i < 1000000; i++)
{
if (a[i] && ok(i, cha))
{
printf("%lld\n", cha);
return 0;
} }
} }
} }
return -1;
} }
``` ```
### B ### B
```cpp ```cpp
int f(LL a[], int n) const int N = 10001;
{ int prime[N]{0};
for (int i = 0; i < n; ++i)
{ int main()
LL first = a[i]; {
for (int delta = 1; delta < a[n + 1] - first; ++delta)
{ for (int i = 2; i != N; ++i)
int m = first; prime[i] = 1;
for (int j = 1; j < 10; ++j)
{ for (int i = 2; i < N; ++i)
m += delta; {
if (all.find(m) == all.end()) for (int j = i + 1; j < N; ++j)
break; {
if (m > a[n - 1]) if (j % i == 0)
{
if (prime[j] == 1)
prime[j] = 0;
}
}
}
for (int d = 1; d <= 300; ++d)
{
for (int i = 2; i < N; ++i)
{
int a1 = i, flag = 1, len = 1;
while (len < 10)
{
if (prime[a1 + len * d] == 0)
{
flag = 0;
break; break;
if (j == 9) }
return delta; else
{
++len;
}
}
if (flag)
{
cout << d << endl;
break;
} }
} }
} }
return -1;
return 0;
} }
``` ```
### C ### C
```cpp ```cpp
typedef long long LL;
set<int> all;
bool isPrimt(LL t)
{
for (int i = 2; i < t / 2; ++i)
{
if (t % i == 0)
return false;
}
return true;
}
int f(LL a[], int n) int f(LL a[], int n)
{ {
for (int i = 0; i < n; ++i) for (int i = 0; i < n; ++i)
{ {
LL first = a[i]; LL first = a[i];
for (int delta = 1; delta < a[n + 1] + first; ++delta) for (int delta = 1; delta < a[n] - first; ++delta)
{ {
int m = first; int m = first;
for (int j = 1; j < 10; ++j) for (int j = 1; j < 10; ++j)
{ {
m += delta; m += delta;
if (all.find(m) == all.end()) if (all.find(m) == all.end())
break;
if (m > a[n - 1])
break; break;
if (j == 9) if (j == 9)
return delta; return delta;
} }
} }
} }
return -1; return -1;
} }
const int N = 5000;
int main()
{
LL a[N];
a[0] = 2;
a[1] = 3;
all.insert(2);
all.insert(3);
int index = 2;
LL t = 5;
while (index < N)
{
if (isPrimt(t))
{
a[index++] = t;
all.insert(t);
}
t++;
}
printf("%d\n", f(a, N));
return 0;
}
``` ```
...@@ -54,14 +54,14 @@ ...@@ -54,14 +54,14 @@
-999999829 -999999829
``` ```
以下选项错误的是?
## aop ## aop
### before ### before
```cpp ```cpp
#include <iostream> #include <bits/stdc++.h>
#include <vector>
#include <algorithm>
using namespace std; using namespace std;
``` ```
### after ### after
...@@ -73,43 +73,48 @@ using namespace std; ...@@ -73,43 +73,48 @@ using namespace std;
## 答案 ## 答案
```cpp ```cpp
#define ll long long
#define inf 0x7fffffff
using namespace std;
const int N = 1e5 + 10;
const int mod = 1e9 + 9;
int n, k;
int a[N];
ll ans = 1;
int main() int main()
{ {
int n, k;
long long ans;
cin >> n >> k; cin >> n >> k;
vector<long long> num; for (int i = 1; i <= n; i++)
for (int i = 0; i < n; i++) scanf("%d", &a[i]);
{
int temp; sort(a + 1, a + n + 1);
cin >> temp;
num.push_back(temp); int sign = 1;
} if (k % 2)
sort(num.begin(), num.end());
if (k % 2 != 0)
{ {
ans = num.back(); ans = a[n];
k = k - 1; n--;
num.pop_back(); k--;
} }
else
ans = 1; int i = 0, j = n;
while (k > 0) while (k)
{ {
if ((num[0] * num[1]) > num.at(num.size() - 1) * num.at(num.size() - 2)) ll tmp1 = (ll)a[i] * a[i + 1], tmp2 = (ll)a[j] * a[j - 1];
if (tmp1 * sign > tmp2 * sign)
{ {
ans = ans * num[0] * num[1] % 1000000009; ans = (tmp1 % mod * ans) % mod;
num.erase(num.begin(), num.begin() + 1); i += 2;
} }
else else
{ {
ans = ans * num.at(num.size() - 1) * num.at(num.size() - 2) % 1000000009; ans = (tmp2 % mod * ans) % mod;
num.pop_back(); j -= 2;
num.pop_back();
} }
k -= 2; k -= 2;
} }
cout << ans;
printf("%lld\n", ans);
return 0; return 0;
} }
...@@ -120,43 +125,164 @@ int main() ...@@ -120,43 +125,164 @@ int main()
### A ### A
```cpp ```cpp
#define mem(a, b) memset(a, b, sizeof(a))
#define mod 1000000009
typedef long long ll;
const int maxn = 1e6 + 5;
const double esp = 1e-7;
const int ff = 0x3f3f3f3f;
map<int, int>::iterator it;
struct node
{
ll x;
int f;
} a[maxn];
int n, k;
bool cmp(node x, node y)
{
return x.x > y.x;
}
ll solve(int o)
{
ll ans = 1;
int cnt = 0;
if (o == 0)
{
for (int i = 1; i <= k; i++)
{
ans = (ans * a[i].x) % mod;
if (a[i].f == 1)
cnt++;
}
}
else
{
for (int i = n; i > n - k; i--)
{
ans = (ans * a[i].x) % mod;
if (a[i].f == 1)
cnt++;
}
}
if (cnt & 1)
return ans * (-1);
return ans;
}
int main() int main()
{ {
int n, k;
long long ans;
cin >> n >> k; cin >> n >> k;
vector<long long> num;
for (int i = 0; i < n; i++) int flag = 0;
int cnt = 0;
for (int i = 1; i <= n; i++)
{ {
int temp; scanf("%lld", &a[i].x);
cin >> temp; if (a[i].x < 0)
num.push_back(temp); {
a[i].f = 1;
a[i].x = -a[i].x;
cnt++;
}
else if (a[i].x > 0)
a[i].f = 0;
else
{
i--;
n--;
flag = 1;
}
} }
sort(num.begin(), num.end());
if (k % 2 != 0) sort(a + 1, a + n + 1, cmp);
ll ans = 0;
if (n < k)
ans = 0;
else if (cnt == n)
{ {
ans = num.back(); if (k & 1)
k = k - 1; ans = solve(1);
num.pop_back(); else
ans = solve(0);
} }
else if (cnt == 0)
ans = solve(0);
else else
ans = 1;
while (k > 0)
{ {
if ((num[0] * num[1]) > num.at(num.size()) * num.at(num.size() - 1)) int tmp = 0;
{ for (int i = 1; i <= k; i++)
ans = ans * num[0] * num[1] % 1000000009; if (a[i].f == 1)
num.erase(num.begin(), num.begin() + 1); tmp++;
}
if (tmp % 2 == 0)
ans = solve(0);
else else
{ {
ans = ans * num.at(num.size()) * num.at(num.size() - 1) % 1000000009; ans = -1;
num.pop_back();
num.pop_back(); int p = -1, q = -1;
for (int i = k + 1; i <= n; i++)
if (a[i].f == 0)
{
q = i;
break;
}
for (int i = k; i >= 1; i--)
if (a[i].f == 1)
{
p = i;
break;
}
if (p != -1 && q != -1)
{
swap(a[p], a[q]);
ans = solve(0);
swap(a[p], a[q]);
}
p = -1, q = -1;
for (int i = k + 1; i <= n; i++)
if (a[i].f == 1)
{
q = i;
break;
}
for (int i = k; i >= 1; i--)
if (a[i].f == 0)
{
p = i;
break;
}
if (p != -1 && q != -1)
{
swap(a[p], a[q]);
ans = max(ans, solve(0));
swap(a[p], a[q]);
}
if (ans < 0)
ans = solve(1);
} }
k -= 2;
} }
cout << ans;
if (ans < 0)
if (flag)
{
cout << 0 << endl;
return 0;
}
cout << ans << endl;
return 0; return 0;
} }
``` ```
...@@ -164,43 +290,72 @@ int main() ...@@ -164,43 +290,72 @@ int main()
### B ### B
```cpp ```cpp
#define mod 1000000009
const int N = 100010;
typedef long long LL;
int a[N];
int n, k;
int main() int main()
{ {
int n, k;
long long ans;
cin >> n >> k; cin >> n >> k;
vector<long long> num;
for (int i = 0; i < n; i++) for (int i = 0; i < n; i++)
{ {
int temp; scanf("%d", &a[i]);
cin >> temp;
num.push_back(temp);
} }
sort(num.begin(), num.end()); sort(a, a + n);
if (k % 2 != 0) LL res = 1;
if (n == k)
{ {
ans = num.back(); for (int i = 0; i < n; i++)
k = k - 1; {
num.pop_back(); res = (res * a[i]) % mod;
}
cout << res % mod;
return 0;
} }
else
ans = 1; if (a[n - 1] < 0)
while (k > 0)
{ {
if ((num[0] * num[1]) > num.at(num.size() - 1) * num.at(num.size() - 1)) if (k % 2 == 1)
{ {
ans = ans * num[0] * num[1] % 1000000009; for (int i = n - 1; i >= n - k; i--)
num.erase(num.begin(), num.begin() + 1); {
res = (res * a[i]) % mod;
}
} }
else else
{ {
ans = ans * num.at(num.size() - 1) % 1000000009; for (int i = 0; i < k; i++)
num.pop_back(); {
num.pop_back(); res = (res * a[i]) % mod;
}
}
cout << res << endl;
return 0;
}
int l = 0, r = n - 1;
if (k % 2 == 1)
{
res = a[r--];
k--;
}
while (k)
{
LL x = (LL)a[l] * a[l + 1], y = (LL)a[r] * a[r - 1];
if (x > y)
{
res = x % mod * res % mod;
l += 2;
}
else
{
res = y % mod * res % mod;
r -= 2;
} }
k -= 2; k -= 2;
} }
cout << ans; cout << res << endl;
return 0; return 0;
} }
``` ```
...@@ -238,7 +393,7 @@ int main() ...@@ -238,7 +393,7 @@ int main()
} }
else else
{ {
ans = ans * num.at(num.size() - 1) % 1000000009; ans = ans * num.at(num.size() - 1) * num.at(num.size() - 2) % 1000000009;
num.pop_back(); num.pop_back();
num.pop_back(); num.pop_back();
} }
......
...@@ -14,12 +14,14 @@ ...@@ -14,12 +14,14 @@
689 5510 8243 6114 337 4096 8199 7313 3685 211 689 5510 8243 6114 337 4096 8199 7313 3685 211
``` ```
以下错误的选项是?
## aop ## aop
### before ### before
```cpp ```cpp
#include <iostream> #include <bits/stdc++.h>
using namespace std; using namespace std;
``` ```
### after ### after
...@@ -41,12 +43,12 @@ int main() ...@@ -41,12 +43,12 @@ int main()
while (num % 5 == 0) while (num % 5 == 0)
{ {
count5++; count5++;
num /= 5; num %= 5;
} }
while (num % 2 == 0) while (num % 2 == 0)
{ {
count2++; count2++;
num /= 2; num %= 2;
} }
} }
int ans = count2 < count5 ? count2 : count5; int ans = count2 < count5 ? count2 : count5;
...@@ -62,24 +64,20 @@ int main() ...@@ -62,24 +64,20 @@ int main()
```cpp ```cpp
int main() int main()
{ {
int count2 = 0, count5 = 0;
int num; long long int a, sum = 1, aum = 0;
for (int i = 0; i < 100; i++) for (int i = 0; i < 100; i++)
{ {
cin >> num; cin >> a;
while (num % 5 == 0) sum = sum * a;
while ((sum % 10) == 0)
{ {
count5++; sum = sum / 10;
num /= 5; aum++;
}
while (num % 2 == 0)
{
count2++;
num /= 2;
} }
sum = sum % 10000;
} }
int ans = count2 < count5 ? count5 : count2; printf("%lld", aum);
cout << ans;
return 0; return 0;
} }
``` ```
...@@ -87,29 +85,30 @@ int main() ...@@ -87,29 +85,30 @@ int main()
### B ### B
```cpp ```cpp
int a[] = {5650, 4542, 3554, 473, 946, 4114, 3871, 9073, 90, 4329,
2758, 7949, 6113, 5659, 5245, 7432, 3051, 4434, 6704, 3594,
9937, 1173, 6866, 3397, 4759, 7557, 3070, 2287, 1453, 9899,
1486, 5722, 3135, 1170, 4014, 5510, 5120, 729, 2880, 9019,
2049, 698, 4582, 4346, 4427, 646, 9742, 7340, 1230, 7683,
5693, 7015, 6887, 7381, 4172, 4341, 2909, 2027, 7355, 5649,
6701, 6645, 1671, 5978, 2704, 9926, 295, 3125, 3878, 6785,
2066, 4247, 4800, 1578, 6652, 4616, 1113, 6205, 3264, 2915,
3966, 5291, 2904, 1285, 2193, 1428, 2265, 8730, 9436, 7074,
689, 5510, 8243, 6114, 337, 4096, 8199, 7313, 3685, 211};
int main() int main()
{ {
int count2 = 0, count5 = 0; int k1 = 0, k2 = 0;
int num;
for (int i = 0; i < 100; i++) for (int i = 0; i < 100; i++)
{ {
cin >> num; while (!(a[i] % 2))
while (num % 5 == 0) a[i] /= 2, k1++;
{ while (!(a[i] % 5))
count5++; a[i] /= 5, k2++;
num %= 5;
}
while (num % 2 == 0)
{
count2++;
num %= 2;
}
} }
int ans = count2 < count5 ? count2 : count5; cout << min(k1, k2);
cout << ans;
return 0; return 0;
} }
``` ```
### C ### C
...@@ -117,24 +116,25 @@ int main() ...@@ -117,24 +116,25 @@ int main()
```cpp ```cpp
int main() int main()
{ {
int count2 = 0, count5 = 0; int t_cnt, f_cnt, data = 0;
int num; t_cnt = f_cnt = 0;
for (int i = 0; i < 100; i++) for (int i = 0; i < 100; i++)
{ {
cin >> num; cin >> data;
while (num % 5 == 0) while (data % 5 == 0)
{ {
count5++; f_cnt++;
num += 5; data /= 5;
} }
while (num % 2 == 0) while (data % 2 == 0)
{ {
count2++; t_cnt++;
num += 2; data /= 2;
} }
} }
int ans = count2 < count5 ? count2 : count5; cout << min(t_cnt, f_cnt) << endl;
cout << ans;
return 0; return 0;
} }
``` ```
...@@ -8,12 +8,30 @@ ...@@ -8,12 +8,30 @@
以下的代码打印出了大衍数列的前 100 项。 以下的代码打印出了大衍数列的前 100 项。
请填补空白处的内容。
```cpp
#include <stdio.h>
int main()
{
int i;
for (i = 1; i <= 100; i++)
{
if (__________________)
printf("%d ", i * i / 2);
else
printf("%d ", (i * i - 1) / 2);
}
printf("\n");
}
```
## aop ## aop
### before ### before
```cpp ```cpp
#include <stdio.h>
``` ```
### after ### after
...@@ -24,18 +42,7 @@ ...@@ -24,18 +42,7 @@
## 答案 ## 答案
```cpp ```cpp
int main() i % 2 == 0
{
int i;
for (i = 1; i <= 100; i++)
{
if (i % 2 == 0)
printf("%d ", i * i / 2);
else
printf("%d ", (i * i - 1) / 2);
}
printf("\n");
}
``` ```
## 选项 ## 选项
...@@ -43,50 +50,17 @@ int main() ...@@ -43,50 +50,17 @@ int main()
### A ### A
```cpp ```cpp
int main() i % 2 == 1
{
int i;
for (i = 1; i < 100; i++)
{
if (i % 2 == 0)
printf("%d ", i * i / 2);
else
printf("%d ", (i * i - 1) / 2);
}
printf("\n");
}
``` ```
### B ### B
```cpp ```cpp
int main() i / 2 == 0
{
int i;
for (i = 1; i <= 100; i++)
{
if (i / 2 == 0)
printf("%d ", i * i / 2);
else
printf("%d ", (i * i - 1) / 2);
}
printf("\n");
}
``` ```
### C ### C
```cpp ```cpp
int main() i / 2 == 1
{
int i;
for (i = 1; i <= 100; i++)
{
if (i % 2 == 0)
printf("%d ", i * i % 2);
else
printf("%d ", (i * i - 1) / 2);
}
printf("\n");
}
``` ```
...@@ -36,12 +36,15 @@ Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。 ...@@ -36,12 +36,15 @@ Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。
1 <= n <= 1,000,000。 1 <= n <= 1,000,000。
``` ```
下列哪一个选项会超时?
## aop ## aop
### before ### before
```cpp ```cpp
#include <stdio.h> #include <bits/stdc++.h>
using namespace std;
``` ```
### after ### after
...@@ -52,22 +55,18 @@ Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。 ...@@ -52,22 +55,18 @@ Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。
## 答案 ## 答案
```cpp ```cpp
int main() int fib(int n)
{ {
int n, b; if (n < 3)
scanf("%d", &n); return 1;
int a[n];
a[0] = a[1] = 1;
for (int i = 2; i < n; i++)
{
a[i] = (a[i - 1] + a[i - 2]) % 10007;
b = a[i];
}
if (n > 2)
printf("%d", b);
else else
printf("1"); return fib(n - 1) + fib(n - 2);
}
int main()
{
int n;
cin >> n;
cout << fib(n) % 10007 << endl;
return 0; return 0;
} }
``` ```
...@@ -77,22 +76,28 @@ int main() ...@@ -77,22 +76,28 @@ int main()
### A ### A
```cpp ```cpp
int main() int fib(int N)
{ {
int n, b; if (N <= 0)
scanf("%d", &n); return 0;
int a[n]; if (N == 1 || N == 2)
a[0] = a[1] = 1; return 1;
int a = 1, b = 1;
for (int i = 2; i < n; i++) for (int i = 3; i <= N; i++)
{ {
a[i] = (a[i - 1] + a[i - 2]) % 10007; int c = (a + b) % 10007;
b = a[i] + 1; a = b;
b = c;
} }
if (n > 2) return b;
printf("%d", b); }
else int main()
printf("1"); {
int n;
cin >> n;
cout << fib(n) << endl;
return 0; return 0;
} }
``` ```
...@@ -110,7 +115,7 @@ int main() ...@@ -110,7 +115,7 @@ int main()
for (int i = 2; i < n; i++) for (int i = 2; i < n; i++)
{ {
a[i] = (a[i - 1] + a[i - 2]) % 10007; a[i] = (a[i - 1] + a[i - 2]) % 10007;
b = a[i - 1]; b = a[i];
} }
if (n > 2) if (n > 2)
printf("%d", b); printf("%d", b);
...@@ -123,22 +128,24 @@ int main() ...@@ -123,22 +128,24 @@ int main()
### C ### C
```cpp ```cpp
int f[1000000 + 1];
void meter(int n)
{
f[1] = 1;
f[2] = 1;
if (n >= 3)
for (int i = 3; i <= n; i++)
{
f[i] = (f[i - 1] + f[i - 2]) % 10007;
}
}
int main() int main()
{ {
int n, b; meter(1000000);
scanf("%d", &n); int n;
int a[n]; cin >> n;
a[0] = a[1] = 1; cout << f[n];
for (int i = 2; i < n; i++)
{
a[i] = (a[i - 1] + a[i - 2]) % 10007;
b = a[i - 2];
}
if (n > 2)
printf("%d", b);
else
printf("1");
return 0; return 0;
} }
``` ```
...@@ -37,22 +37,15 @@ C = [C1, C2, ... CN], ...@@ -37,22 +37,15 @@ C = [C1, C2, ... CN],
27 27
``` ```
以下错误的一项是?
## aop ## aop
### before ### before
```cpp ```cpp
#include <iostream> #include <bits/stdc++.h>
#include <cstring>
using namespace std; using namespace std;
typedef long long LL;
const int N = 1e5 + 10;
int a[N], b[N], c[N], sa[N], sc[N], s[N];
``` ```
### after ### after
...@@ -66,34 +59,47 @@ int a[N], b[N], c[N], sa[N], sc[N], s[N]; ...@@ -66,34 +59,47 @@ int a[N], b[N], c[N], sa[N], sc[N], s[N];
int main() int main()
{ {
int n; int n;
long long ans = 0;
cin >> n; cin >> n;
for (int i = 0; i < n; i++) int I[n], J[n], K[n];
cin >> a[i], a[i]++; for (int i = 0; i < n; i++)
for (int i = 0; i < n; i++) {
cin >> b[i], b[i]++; cin >> I[i];
for (int i = 0; i < n; i++) }
cin >> c[i], c[i]++; for (int i = 0; i < n; i++)
{
for (int i = 0; i < n; i++) cin >> J[i];
s[a[i]]++; }
for (int i = 1; i < N; i++) for (int i = 0; i < n; i++)
s[i] += s[i - 1]; {
for (int i = 0; i < n; i++) cin >> K[i];
sa[i] = s[b[i] - 1]; }
sort(I, I + n);
memset(s, 0, sizeof s); sort(J, J + n);
sort(K, K + n);
for (int i = 0; i < n; i++) int index_min_i = 0, index_min_j = 0;
s[c[i]]++; for (int i = 0; i < n; i++)
for (int i = 1; i < N; i++) {
s[i] += s[i - 1]; int count1 = 0, count2 = 0;
for (int i = 0; i < n; i++) for (int j = index_min_i; j < n; j++)
sc[i] = s[N - 1] - s[b[i]]; {
if (I[i] < J[j])
LL res = 0; {
for (int i = 0; i <= n; i++) index_min_i = j;
res += (LL)sa[i] * sc[i]; count1 = n - j;
cout << res; for (int k = index_min_j; k < n; k++)
{
count2 = n - k;
index_min_j = k;
ans += (long long)(count1 * count2);
}
break;
}
}
}
cout << ans << endl;
return 0;
} }
``` ```
## 选项 ## 选项
...@@ -102,80 +108,115 @@ int main() ...@@ -102,80 +108,115 @@ int main()
### A ### A
```cpp ```cpp
const int maxn = 1e5 + 10;
typedef long long ll;
int a[maxn];
int b[maxn];
int c[maxn];
int main() int main()
{ {
int n; int n;
ll ans = 0;
cin >> n; cin >> n;
for (int i = 0; i < n; i++) for (int i = 0; i < n; i++)
cin >> a[i], a[i]++; cin >> a[i];
for (int i = 0; i < n; i++)
cin >> b[i], b[i]++;
for (int i = 0; i < n; i++) for (int i = 0; i < n; i++)
cin >> c[i], c[i]++; cin >> b[i];
for (int i = 0; i < n; i++) for (int i = 0; i < n; i++)
s[a[i]]++; cin >> c[i];
for (int i = 1; i < N; i++) sort(a, a + n);
s[i] += s[i - 1]; sort(b, b + n);
sort(c, c + n);
ll cnt1 = 0, cnt2 = 0;
for (int i = 0; i < n; i++) for (int i = 0; i < n; i++)
sa[i] = s[b[i] - 1]; {
while (cnt1 < n && a[cnt1] < b[i])
cnt1++;
while (cnt2 < n && c[cnt2] <= b[i])
cnt2++;
ans += cnt1 * (n - cnt2);
}
memset(s, 0, sizeof s); cout << ans << endl;
for (int i = 0; i < n; i++)
s[c[i]]++;
for (int i = 1; i < N; i++)
s[i] += s[i - 1];
for (int i = 0; i < n; i++)
sc[i] = s[N] - s[b[i]];
LL res = 0;
for (int i = 0; i <= n; i++)
res += (LL)sa[i] * sc[i];
cout << res;
} }
``` ```
### B ### B
```cpp ```cpp
int main() #define ll long long
{ using namespace std;
int n;
cin >> n;
for (int i = 0; i < n; i++)
cin >> a[i], a[i]++;
for (int i = 0; i < n; i++)
cin >> b[i], b[i]++;
for (int i = 0; i < n; i++)
cin >> c[i], c[i]++;
for (int i = 0; i < n; i++) const int N = 100000 + 10;
s[a[i]]++;
for (int i = 1; i < N; i++)
s[i] += s[i - 1];
for (int i = 0; i < n; i++)
sa[i] = s[b[i] - 1];
memset(s, 0, sizeof s); int a[N], b[N], c[N];
int n;
for (int i = 0; i < n; i++) int find2(int x, int y[])
s[c[i]]++; {
for (int i = 1; i < N; i++) int l = 1, r = n;
s[i] = s[i - 1]; while (l < r)
for (int i = 0; i < n; i++) {
sc[i] = s[N - 1] - s[b[i]]; int mid = (l + r) >> 1;
if (y[mid] > x)
r = mid;
else
l = mid + 1;
}
if (y[r] <= x)
return 0;
return n - r + 1;
}
LL res = 0; int find1(int x, int y[])
for (int i = 0; i <= n; i++) {
res += (LL)sa[i] * sc[i]; int l = 1, r = n;
cout << res; while (l < r)
{
int mid = (l + r + 1) >> 1;
if (y[mid] < x)
l = mid;
else
r = mid - 1;
}
if (y[l] >= x)
return 0;
return l;
}
int main()
{
cin >> n;
for (int i = 1; i <= n; i++)
cin >> a[i];
for (int i = 1; i <= n; i++)
cin >> b[i];
for (int i = 1; i <= n; i++)
cin >> c[i];
sort(a + 1, a + n + 1);
sort(b + 1, b + n + 1);
sort(c + 1, c + n + 1);
long long ans = 0;
for (int i = 1; i <= n; i++)
{
int x = find1(b[i], a);
int y = find2(b[i], c);
ans += 1ll * x * y;
}
cout << ans;
return 0;
} }
``` ```
### C ### C
```cpp ```cpp
typedef long long LL;
const int N = 1e5 + 10;
int a[N], b[N], c[N], sa[N], sc[N], s[N];
int main() int main()
{ {
int n; int n;
...@@ -199,9 +240,9 @@ int main() ...@@ -199,9 +240,9 @@ int main()
for (int i = 0; i < n; i++) for (int i = 0; i < n; i++)
s[c[i]]++; s[c[i]]++;
for (int i = 1; i < N; i++) for (int i = 1; i < N; i++)
s[i] = s[i - 1]; s[i] += s[i - 1];
for (int i = 0; i < n; i++) for (int i = 0; i < n; i++)
sc[i] = s[N - 1] - s[b[i] - 1]; sc[i] = s[N - 1] - s[b[i]];
LL res = 0; LL res = 0;
for (int i = 0; i <= n; i++) for (int i = 0; i <= n; i++)
......
...@@ -34,66 +34,73 @@ ...@@ -34,66 +34,73 @@
选择2、3、4。 选择2、3、4。
``` ```
以下错误的一项是?
## aop ## aop
### before ### before
```cpp ```cpp
#include <bits/stdc++.h> #include <bits/stdc++.h>
#include <string>
#include <queue>
#include <set>
#include <cstring>
#include <cmath>
#include <algorithm>
#define MAX 1000000000
using namespace std; using namespace std;
int n, k, a[100010];
int b[4];
int flag = 0;
``` ```
### after ### after
```cpp ```cpp
int main()
{
cin >> n >> k;
a[0] = MAX;
for (int i = 1; i <= n; i++)
cin >> a[i];
sort(a + 1, a + n + 1);
reverse(a + 1, a + n + 1);
dfs(a, n, 1);
return 0;
}
``` ```
## 答案 ## 答案
```cpp ```cpp
void dfs(int a[], int n, int s) #define ll long long
using namespace std;
const int maxx = 1e5 + 100;
const int maxm = 1e3 + 100;
int a[maxx];
vector<int> p[maxm];
int n, k;
bool cmp(int a, int b) { return a > b; }
int main()
{ {
if (flag == 1) scanf("%d%d", &n, &k);
return; for (int i = 1; i <= n; i++)
if (s == 4) {
{ scanf("%d", &a[i]);
int sum = b[1] + b[2] + b[3]; p[a[i] % k].push_back(a[i]);
if (sum % k == 0) }
{ for (int i = 0; i < k; i++)
flag = 1; sort(p[i].begin(), p[i].end(), cmp);
cout << sum << endl; int _max = 0;
} for (int i = 0; i < k; i++)
return; {
} if (p[i].size() == 0)
for (int i = 1; i <= n; i++) continue;
{ if ((3 * i == k || i == 0) && p[i].size() >= 3)
if (a[i] < a[s - 1]) _max = max(_max, p[i][0] + p[i][1] + p[i][2]);
{ for (int j = 0; j < k; j++)
b[s] = a[i]; {
dfs(a, n, s + 1); if (!p[j].size())
} continue;
} int z = k - (i + j) % k;
if (z < 0)
continue;
if (z == i && z == j)
continue;
else if ((i != j) && (z == i || z == j) && p[z].size() >= 2)
_max = max(_max, p[i][0] + p[j][0] + p[z][1]);
else if (i == j && p[i].size() >= 2 && p[z].size() >= 1)
_max = max(_max, p[i][0] + p[j][1] + p[z][0]);
else if (i != j && i != z && j != z && p[i].size() >= 1)
_max = max(_max, p[i][0] + p[j][0] + p[z][0]);
}
}
printf("%d\n", _max);
return 0;
} }
``` ```
## 选项 ## 选项
...@@ -101,83 +108,145 @@ void dfs(int a[], int n, int s) ...@@ -101,83 +108,145 @@ void dfs(int a[], int n, int s)
### A ### A
```cpp ```cpp
void dfs(int a[], int n, int s) #define FOR0(a, b) for (int i = a; i < b; ++i)
#define FORE(a, b) for (int i = a; i <= b; ++i)
typedef long long ll;
typedef pair<int, int> pii;
ll dp[2][4][1005];
int n, k, a[100005], v[100005];
int main()
{ {
if (flag == 1) scanf("%d%d", &n, &k);
return; for (int i = 1; i <= n; ++i)
if (s == 4) {
{ scanf("%d", &a[i]);
int sum = b[1] + b[2] + b[3]; v[i] = a[i];
if (sum % k == 0) v[i] %= k;
{ }
flag = 1; memset(dp, -0x3f3f3f3f, sizeof dp);
cout << sum << endl; dp[0][0][0] = 0;
} int d = 0;
return; for (int i = 1; i <= n; ++i)
} {
for (int i = 1; i <= n; i++) for (int j = 0; j < k; ++j)
{ {
if (a[i] < a[s - 1]) for (int p = 0; p <= 3; ++p)
{ {
b[s] = a[i]; if (i < p)
dfs(a, n, s); continue;
} dp[d ^ 1][p][j] = max(dp[d ^ 1][p][j], dp[d][p][j]);
} if (p > 0)
dp[d ^ 1][p][j] = max(dp[d ^ 1][p][j], dp[d][p - 1][((j - v[i]) % k + k) % k] + a[i]);
}
}
d ^= 1;
}
cout << dp[d][3][0] << endl;
return 0;
} }
``` ```
### B ### B
```cpp ```cpp
void dfs(int a[], int n, int s) int n, k, ans = 0;
int temp[3], num[100005], vis[100005] = {0};
void dfs(int s)
{ {
if (flag == 1) if (s == 3)
return; {
if (s == 4) int t = temp[0] + temp[1] + temp[2];
{ if (t % k == 0 && t > ans)
int sum = b[1] + b[2] + b[3]; ans = t;
if (sum % k == 0) return;
{ }
flag = 1; else
cout << sum << endl; {
} for (int i = 0; i < n; i++)
return; {
} if (!vis[i])
for (int i = 1; i <= n; i++) {
{ temp[s] = num[i];
if (a[i] < a[s + 1]) vis[i] = 1;
{ dfs(s + 1);
b[s] = a[i]; vis[i] = 0;
dfs(a, n, s + 1); }
} }
} }
}
int main()
{
scanf("%d%d", &n, &k);
for (int i = 0; i < n; i++)
scanf("%d", &num[i]);
dfs(0);
printf("%d\n", ans);
return 0;
} }
``` ```
### C ### C
```cpp ```cpp
void dfs(int a[], int n, int s) int N, k;
int main()
{ {
if (flag == 1) ios::sync_with_stdio(0);
return; cin.tie(0);
if (s == 4) cout.tie(0);
{ cin >> N >> k;
int sum = b[1] + b[2] + b[3]; vector<vector<int>> vec(k, vector<int>(3, -1));
if (sum % k == 0) for (int i = 0; i < N; ++i)
{ {
flag = 1; int temp;
cout << sum << endl; cin >> temp;
} int y = temp % k;
return; if (temp > vec[y][0])
} {
for (int i = 1; i <= n; i++) vec[y][2] = vec[y][1];
{ vec[y][1] = vec[y][0];
if (a[i] < a[s + 1]) vec[y][0] = temp;
{ }
b[s] = a[i]; else if (temp > vec[y][1])
dfs(a, n, s); {
} vec[y][2] = vec[y][1];
} vec[y][1] = temp;
}
else if (temp > vec[y][2])
vec[y][2] = temp;
}
vector<int> ans(3);
int result = 0;
for (int i = 0; i < k; ++i)
for (int j = i; j < k; ++j)
{
int r = (k - i + k - j) % k;
ans[0] = vec[i][0];
if (i == j)
{
ans[1] = vec[i][1];
if (r == i)
ans[2] = vec[i][2];
else
ans[2] = vec[r][0];
}
else
{
ans[1] = vec[j][0];
if (r == i)
ans[2] = vec[i][1];
else if (r == j)
ans[2] = vec[j][1];
else
ans[2] = vec[r][0];
}
if (ans[0] != -1 && ans[1] != -1 && ans[2] != -1 && ans[1] + ans[2] + ans[0] > result)
result = ans[1] + ans[2] + ans[0];
}
cout << result;
} }
``` ```
...@@ -9,16 +9,15 @@ ...@@ -9,16 +9,15 @@
请你利用计算机的优势,帮助小明寻找答案。 请你利用计算机的优势,帮助小明寻找答案。
以下哪一项不能得到正确答案?
## aop ## aop
### before ### before
```cpp ```cpp
#include <iostream> #include <bits/stdc++.h>
#define LEFT 0
#define RIGHT 1
using namespace std; using namespace std;
int stage[40][2];
``` ```
### after ### after
...@@ -29,19 +28,32 @@ int stage[40][2]; ...@@ -29,19 +28,32 @@ int stage[40][2];
## 答案 ## 答案
```cpp ```cpp
int main() int ans = 0;
int sum = 0;
vector<int> a(40, 0);
void dfs(int steps)
{ {
int i; if (sum >= 39)
stage[1][LEFT] = 1;
stage[1][RIGHT] = 0;
stage[2][LEFT] = 1;
stage[2][RIGHT] = 1;
for (i = 3; i <= 39; i++)
{ {
stage[i][LEFT] = stage[i - 1][RIGHT] + stage[i - 2][RIGHT]; if ((steps - 1) % 2 == 0 && sum == 39)
stage[i][RIGHT] = stage[i - 1][LEFT] + stage[i - 2][LEFT]; ans++;
return;
} }
cout << stage[39][RIGHT] << endl;
for (int i = 1; i <= 2; i++)
{
a[steps] = i;
sum += i;
dfs(steps + 1);
sum -= i;
}
}
int main()
{
dfs(0);
cout << ans << endl;
return 0; return 0;
} }
``` ```
...@@ -51,19 +63,24 @@ int main() ...@@ -51,19 +63,24 @@ int main()
### A ### A
```cpp ```cpp
int main() int ans = 0;
void dfs(int k, int n)
{ {
int i; if (k == 39 && n % 2 == 0)
stage[1][LEFT] = 1;
stage[1][RIGHT] = 0;
stage[2][LEFT] = 1;
stage[2][RIGHT] = 1;
for (i = 3; i <= 39; i++)
{ {
stage[i][LEFT] = stage[i - 1][RIGHT] + stage[i - 2][RIGHT]; ans++;
stage[i][RIGHT] = stage[i - 1][LEFT] + stage[i - 2][LEFT];
} }
cout << stage[39][LEFT] << endl; if (k > 39)
return;
dfs(k + 1, n + 1);
dfs(k + 2, n + 1);
}
int main()
{
dfs(0, 0);
printf("%d\n", ans);
return 0; return 0;
} }
``` ```
...@@ -71,19 +88,27 @@ int main() ...@@ -71,19 +88,27 @@ int main()
### B ### B
```cpp ```cpp
int main() int countt = 0;
void f(int stair, int step)
{ {
int i; if (stair < 0)
stage[1][LEFT] = 1; return;
stage[1][RIGHT] = 0; if (step % 2 == 0 && stair == 0)
stage[2][LEFT] = 1;
stage[2][RIGHT] = 1;
for (i = 3; i <= 39; i++)
{ {
stage[i][LEFT] = stage[i + 1][RIGHT] + stage[i - 1][RIGHT]; countt++;
stage[i][RIGHT] = stage[i + 1][LEFT] + stage[i - 1][LEFT]; return;
} }
cout << stage[39][RIGHT] << endl; for (int i = 1; i <= 2; i++)
{
f(stair - i, step + 1);
}
}
int main(void)
{
f(39, 0);
cout << countt << endl;
return 0; return 0;
} }
``` ```
...@@ -91,6 +116,11 @@ int main() ...@@ -91,6 +116,11 @@ int main()
### C ### C
```cpp ```cpp
#define LEFT 0
#define RIGHT 1
using namespace std;
int stage[40][2];
int main() int main()
{ {
int i; int i;
...@@ -100,10 +130,10 @@ int main() ...@@ -100,10 +130,10 @@ int main()
stage[2][RIGHT] = 1; stage[2][RIGHT] = 1;
for (i = 3; i <= 39; i++) for (i = 3; i <= 39; i++)
{ {
stage[i][LEFT] = stage[i + 1][RIGHT] + stage[i - 1][RIGHT]; stage[i][LEFT] = stage[i - 1][RIGHT] + stage[i - 2][RIGHT];
stage[i][RIGHT] = stage[i + 1][LEFT] + stage[i - 1][LEFT]; stage[i][RIGHT] = stage[i - 1][LEFT] + stage[i - 2][LEFT];
} }
cout << stage[39][LEFT] << endl; cout << stage[39][RIGHT] << endl;
return 0; return 0;
} }
``` ```
# 第几天 # 第几天
y年m月d日是哪一年的第几天。 y年m月d日是哪一年的第几天。
比如y年的1月1日是那一年的第一天,那么y年m月d日是哪一年的第几天。 比如y年的1月1日是那一年的第一天,那么2000年7月7日是那一年的第几天。
**输入**
```
y m d
```
**输出**
输出一个整数
**样例**
**输入** **输入**
``` ```
2000 7 7 2000 7 7
``` ```
**输出**
``` 请通过以下代码,选出正确答案。
189
```
## aop
### before
```cpp ```cpp
#include <iostream> #include <bits/stdc++.h>
using namespace std; using namespace std;
bool is_leap(int year) bool is_leap(int year)
{ {
return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0; return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
} }
```
### after
```cpp
```
## 答案
```cpp
int main() int main()
{ {
int y, m, d, ans = 0; int y, m, d, ans = 0;
...@@ -54,9 +27,9 @@ int main() ...@@ -54,9 +27,9 @@ int main()
int L_m_d[12] = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; int L_m_d[12] = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int nonL_m_d[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; int nonL_m_d[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if (is_leap(y)) if (is_leap(y))
{ {
for (int i = 0; i < (m - 1); i++) for (int i = 0; i < (m - 1); i++)
{ {
ans += L_m_d[i]; ans += L_m_d[i];
} }
...@@ -73,7 +46,26 @@ int main() ...@@ -73,7 +46,26 @@ int main()
cout << ans << endl; cout << ans << endl;
return 0; return 0;
} }
```
## aop
### before
```cpp
```
### after
```cpp
```
## 答案
```cpp
189
``` ```
## 选项 ## 选项
...@@ -81,92 +73,17 @@ int main() ...@@ -81,92 +73,17 @@ int main()
### A ### A
```cpp ```cpp
int main() 188
{
int y, m, d, ans = 0;
cin >> y >> m >> d;
int L_m_d[12] = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int nonL_m_d[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if (is_leap(y))
{
for (int i = 0; i < m; i++)
{
ans += L_m_d[i];
}
ans += d;
}
else
{
for (int i = 0; i < (m - 1); i++)
{
ans += nonL_m_d[i];
}
ans += d;
}
cout << ans << endl;
return 0;
}
``` ```
### B ### B
```cpp ```cpp
int main() 190
{
int y, m, d, ans = 0;
cin >> y >> m >> d;
int L_m_d[12] = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int nonL_m_d[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if (is_leap(y))
{
for (int i = 0; i < (m - 1); i++)
{
ans += L_m_d[i];
}
ans += d;
}
else
{
for (int i = 0; i < m; i++)
{
ans += nonL_m_d[i];
}
ans += d;
}
cout << ans << endl;
return 0;
}
``` ```
### C ### C
```cpp ```cpp
int main() 191
{
int y, m, d, ans = 0;
cin >> y >> m >> d;
int L_m_d[12] = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int nonL_m_d[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if (is_leap(y))
{
for (int i = 0; i < m; i++)
{
ans += L_m_d[i];
}
ans += d;
}
else
{
for (int i = 0; i < m; i++)
{
ans += nonL_m_d[i];
}
ans += d;
}
cout << ans << endl;
return 0;
}
``` ```
...@@ -31,24 +31,13 @@ ...@@ -31,24 +31,13 @@
7 9 7 9
``` ```
## aop
### before 请从以下四个选项中选择正确的代码填补空白处,实现方阵转置功能。
```cpp ```cpp
#include <bits/stdc++.h> #include <bits/stdc++.h>
using namespace std; using namespace std;
```
### after
```cpp
```
## 答案
```cpp
int main() int main()
{ {
int m, n; int m, n;
...@@ -62,6 +51,27 @@ int main() ...@@ -62,6 +51,27 @@ int main()
cin >> a[j][i]; cin >> a[j][i];
} }
} }
__________________
return 0;
}
```
## aop
### before
```cpp
```
### after
```cpp
```
## 答案
```cpp
for (i = 0; i < n; i++) for (i = 0; i < n; i++)
{ {
for (j = 0; j < m; j++) for (j = 0; j < m; j++)
...@@ -70,9 +80,6 @@ int main() ...@@ -70,9 +80,6 @@ int main()
} }
cout << endl; cout << endl;
} }
return 0;
}
``` ```
## 选项 ## 选项
...@@ -80,83 +87,38 @@ int main() ...@@ -80,83 +87,38 @@ int main()
### A ### A
```cpp ```cpp
int main()
{
int m, n;
int a[20][20];
int i, j;
cin >> m >> n;
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
cin >> a[j][i];
}
}
for (i = 0; i < n; i++) for (i = 0; i < n; i++)
{ {
for (j = m; j > 0; j--) for (j = 0; j < m; j++)
{ {
cout << a[i][j] << " "; cout << a[i-1][j] << " ";
} }
cout << endl; cout << endl;
} }
return 0;
}
``` ```
### B ### B
```cpp ```cpp
int main() for (i = 0; i < n; i++)
{
int m, n;
int a[20][20];
int i, j;
cin >> m >> n;
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
cin >> a[j][i];
}
}
for (i = n; i > 0; i--)
{ {
for (j = 0; j < m; j++) for (j = 0; j < m; j++)
{ {
cout << a[i][j] << " "; cout << a[i][j-1] << " ";
} }
cout << endl; cout << endl;
} }
return 0;
}
``` ```
### C ### C
```cpp ```cpp
int main() for (i = 0; i < n; i++)
{
int m, n;
int a[20][20];
int i, j;
cin >> m >> n;
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
cin >> a[j][i];
}
}
for (i = n; i > 0; i--)
{ {
for (j = m; j > 0; j--) for (j = 0; j < m; j++)
{ {
cout << a[i][j] << " "; cout << a[i-1][j-1] << " ";
} }
cout << endl; cout << endl;
} }
return 0;
}
``` ```
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册