题目转载自:https://www.cnblogs.com/kearon/p/6683512.html
第一题
代码:
#include <iostream>
#include <string>
#include <cstring>
#include <algorithm>
using namespace std;
int main()
{
double sum = 0.0, add;
int nn;
while(cin >> add >> nn)
{
sum += add * ((double)(nn) / 100.0);
}
cout << sum << endl;
return 0;
}
/*
180.90 88
10.25 65
56.14 90
104.65 90
100.30 88
297.15 50
26.75 65
130.62 50
240.28 58
270.62 80
115.87 88
247.34 95
73.21 90
101.00 50
79.54 50
278.44 70
199.26 50
12.97 90
166.30 78
125.50 58
84.98 90
113.35 68
166.57 50
42.56 90
81.90 95
131.78 80
255.89 78
109.17 90
146.69 68
139.33 65
141.16 78
154.74 80
59.42 80
85.44 68
293.70 88
261.79 65
11.30 88
268.27 58
128.29 88
251.03 80
208.39 75
128.88 75
62.06 90
225.87 75
12.89 75
34.28 75
62.16 58
129.12 50
218.37 50
289.69 80
*/
答案:5200
第二题
思路:暴力打素数表,然后枚举公差。
代码:
#include <iostream>
#include <string>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn = 123456;
bool book[maxn] = {};
int pri[maxn] = {}, cnt = 1;
void getprime()
{
int j;
for(int i = 2; i < maxn; i++)
{
if(!book[i])
{
int cc = (int)(sqrt((double)(i)));
for(j = 2; j <= cc; j++)
{
if(i % j == 0) break;
}
if(j > cc)
{
//cout << i << endl;
pri[++cnt] = i;
for(int k = i + i; k < maxn; k += i)
{
book[k] = true;
}
}
}
}
}
int main()
{
pri[1] = 2;
book[2] = true;
for(int i = 4; i < maxn; i+=2)
{
book[i] = true;
}
getprime();
int ans = 1;
//cout << cnt << endl;
for(int i = 1; i <= 10000; i++)
{
int j = 0;
while(j <= cnt)
{
j++;
int j1 = j, j2 = j + 1;
while(j1 <= cnt && j2 <= cnt)
{
if(pri[j2] - pri[j1] > i) break;
if(pri[j2] - pri[j1] == i)
{
ans++;
j1 = j2;
}
j2++;
}
if(ans == 10)
{
cout << i << endl;
break;
}
else
{
ans = 1;
}
}
if(ans == 10) break;
ans = 1;
}
return 0;
}
第三题
#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn = 123456;
double arr[243][243] = {};
int main()
{
int xx;
for(int i = 1; i <= 29; i++)
{
for(int j = 1; j <= i; j++)
{
cin >> xx;
arr[i][j] = (double)(xx);
}
}
for(int i = 1; i <= 30; i++)
{
for(int j = 1; j <= i; j++)
{
arr[i+1][j] += arr[i][j] / 2.0;
arr[i+1][j+1] += arr[i][j] / 2.0;
}
}
double minn = 245342.0, maxx = 0.0;
for(int i = 1; i <= 30; i++)
{
minn = min(minn, arr[30][i]);
maxx = max(maxx, arr[30][i]);
}
printf("%.13lf\n", maxx * 2086458231 / minn);
return 0;
}
答案:72665192664
第四题
看了别人的代码,总觉得不太对。。如果从中间开始剪的话,那那些不是从中间剪的剪法怎么办呢?
第五题
答案:f(x / 10, k)
第六题
答案:a[i - 1][j - 1] + 1
第七题
代码:
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
int days[2][31] = {{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}};
void check(int yy, int mm, int dd)
{
int cnt = 0;
if(yy <= 59)
{
yy += 2000;
}
else yy += 1900;
if((yy % 4 == 0 && yy % 100 != 0) || yy % 400 == 0)
{
cnt++;
}
if(mm <= 12)
{
if(days[cnt][mm] >= dd)
{
printf("%d-", yy);
if(mm < 10) printf("0%d-", mm);
else printf("%d-", mm);
if(dd < 10) printf("0%d\n", dd);
else printf("%d\n", dd);
}
}
}
int main()
{
int yy[5], mm[5], dd[5];
int aa[5];
string str;
while(cin >> str)
{
int cc = 1;
for(int i = 0; i < str.size(); i += 2)
{
if(str[i] == '/') i++;
aa[cc++] = (str[i] - '0') * 10 + (str[i + 1] - '0');
}
yy[1] = aa[1];
mm[1] = aa[2];
dd[1] = aa[3];
yy[2] = aa[3];
mm[2] = aa[1];
dd[2] = aa[2];
yy[3] = aa[3];
mm[3] = aa[2];
dd[3] = aa[1];
for(int i = 1; i <= 3; i++)
{
check(yy[i], mm[i], dd[i]);
}
}
return 0;
}
第八题
第十题
代码:
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
const int maxn = 1000009;
int sum[maxn] = {}, arr[maxn] = {};
int main()
{
int n, k;
while(cin >> n >> k)
{
int xx;
for(int i = 1; i <= n; i++)
{
cin >> xx;
sum[i] = sum[i - 1] + xx;
}
for(int i = 0; i <= n; i++)
{
arr[(sum[i]%k + k) % k]++;
}
long long ans = 0;
for(int i = 0; i < k; i++)
{
ans += arr[i] % 2 == 0 ? arr[i] / 2 * (arr[i] - 1) : (arr[i] - 1) / 2 * arr[i];
}
cout << ans << endl;
}
return 0;
}