不严谨的地方似乎不少,所以不继续做了。
1001 害死人不偿命的(3n+1)猜想 15 146246/404798 (36.13%)
#include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
int ret = 0;
while (1)
{
if (n == 1)
{
cout << ret << endl;
break;
}
ret ++;
if (n % 2 == 0) n /= 2;
else n = (3 * n + 1) / 2;
}
return 0;
}
1002 写出这个数 20 95681/370330 (25.84%)
#include <iostream>
#include <string>
#include <vector>
using namespace std;
const string pinyin[] = {"ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"};
int main()
{
string s;
cin >> s;
int len = s.size();
int sum = 0;
for (int i = 0; i < len; i ++ ) sum += (s[i] - '0');
vector<int> a;
while (sum)
{
int k = sum % 10;
sum /= 10;
a.push_back(k);
}
for (int i = a.size() - 1; i >= 0; i -- )
{
cout << pinyin[a[i]];
if (i) cout << " ";
}
return 0;
}
1003 我要通过! 20 48686/207210 (23.50%)
#include <iostream>
#include <string>
using namespace std;
int main()
{
int n;
cin >> n;
while (n --)
{
string s;
cin >> s;
if (s.size() < 3)
{
cout << "NO" << endl;
continue;
}
bool noPat = false;
for (int i = 0; i < s.length(); i ++ )
if (s[i] != 'P' && s[i] != 'A' && s[i] != 'T')
{
noPat =true;
break;
}
if (noPat)
{
cout << "NO" << endl;
continue;
}
int qa = 0, za = 0, ha = 0;
int index = 0;
// 如果不是P或者A开头,就一定是错的
if (s[index] != 'P' && s[index] != 'A')
{
cout << "NO" << endl;
continue;
}
while (index < s.size())
{
if (s[index++] == 'A') qa ++;
else break;
}
while (index < s.size())
{
if (s[index++] == 'A') za ++;
else break;
}
while (index < s.size())
{
if (s[index++] == 'A') ha ++;
else break;
}
if (ha == qa * za && za) cout << "YES" << endl;
else cout << "NO" << endl;
}
return 0;
}
1004 成绩排名 20 69672/216169 (32.23%)
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 10010;
class Student
{
public:
string name;
string nums;
int grade;
bool operator< (const Student &t)const
{
return grade < t.grade;
}
};
int main()
{
Student stu[N];
int n;
cin >> n;
int k = n;
while (n --) cin >> stu[n].name >> stu[n].nums >> stu[n].grade;
sort(stu, stu + k);
cout << stu[k - 1].name << " " << stu[k - 1].nums << endl;
cout << stu[0].name << " " << stu[0].nums << endl;
return 0;
}
1005 继续(3n+1)猜想 25 46777/177915 (26.29%)
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 101;
bool cmp(int x,int y)
{
return x > y;
}
int main()
{
int k, a[N];
cin >> k;
// 读入数据
for (int i = 0; i < k; i ++ ) cin >> a[i];
// 覆盖数
for (int i = 0; i < k; i ++ )
{
// 每次迭代的数拿出来
int n = a[i];
// 进入循环,查看是否有覆盖的数字
while (n != 1)
{
if (n % 2 == 0) n /= 2;
else n = (3 * n + 1) / 2;
// 有覆盖的数字给他赋值为1
for (int j = 0; j < k; j ++ )
if (a[j] == n)
a[j] = 1;
}
}
// 将不为1的数字拿出放到另一个数组
int b[N];
int len = 0;
for (int i = 0; i < k; i ++ )
if (a[i] != 1)
b[len++] = a[i];
sort(b, b + len,cmp);
for (int i = 0; i < len; i ++ )
{
cout << b[i];
if (i != len - 1)
cout << " ";
}
return 0;
}
1006 换个格式输出整数 15 60635/120761 (50.21%)
#include <iostream>
using namespace std;
int main()
{
string str;
cin >> str;
int len = str.length();
int k = 0;
while (len--)
{
if (len == 2)
{
int n = str[k++] - '0';
for (int i = 0; i < n; i ++ ) cout << "B";
}
if (len == 1)
{
int n = str[k++] - '0';
for (int i = 0; i < n; i ++ ) cout << "S";
}
if (len == 0)
{
int n = str[k++] - '0';
for (int i = 1; i <= n; i ++ ) cout << i;
}
}
return 0;
}
1007 素数对猜想 20 50322/206833 (24.33%)
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
// 思路:先读入所有小于n的素数,然后再根据判断条件寻找
int main()
{
int n;
cin >> n;
vector<int> v;
while(n >= 2)
{
bool isPrime = true;
for (int i = 2; i <= sqrt(n); i ++ )
if (n % i == 0)
isPrime = false;
if (isPrime) v.push_back(n);
n --;
}
int ret = 0;
for (int i = v.size() - 1; i > 0; i -- )
if (v[i - 1] - v[i] == 2)
ret ++;
cout << ret << endl;
return 0;
}
1008 数组元素循环右移问题 20 55231/170661 (32.36%)
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
const int N = 101;
int main()
{
int n, m;
cin >> n >> m;
vector<int> a(n);
m = m % n;
// 方法1
// for(int i = 0; i < n - m; i ++ )
// cin >> a[m + i];
// for (int i = 0; i < m; i ++ )
// cin >> a[i];
// for (int i = 0; i < n; i ++ )
// {
// cout << a[i];
// if (i < n - 1) cout << " ";
// }
// 方法2
// for(int i = 0; i < n; i ++ ) cin >> a[i];
// for(int i = n - m; i < n; i ++ ) cout << a[i] << " ";
// for(int i = 0; i < n - m; i ++ )
// {
// cout << a[i];
// if (i < n - m - 1) cout << " ";
// }
// 方法3
for(int i = 0; i < n; i ++ ) cin >> a[i];
if (m != 0) {
reverse(begin(a), begin(a) + n);
reverse(begin(a), begin(a) + m);
reverse(begin(a) + m, begin(a) + n);
}
for (int i = 0; i < n; i ++ )
{
cout << a[i];
if (i < n - 1) cout << " ";
}
return 0;
}
1009 说反话 20 61704/168944 (36.52%)
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<string> v;
string str;
while (cin >> str) v.push_back(str);
for (int i = v.size() - 1; i >= 0; i -- )
{
cout << v[i];
if (i > 0) cout << " ";
}
return 0;
}
1010 一元多项式求导 25 46630/215443 (21.64%)
// 这个题的判定有点问题,看看就好
#include <iostream>
using namespace std;
int main()
{
int a, b;
int num = 0;
while (cin >> a >> b && b && a)
{
if(num == 1) cout << " " ;
cout << a * b << " " << b - 1;
num = 1;
}
if(num == 0) cout << "0 0" ;
return 0;
}
1011 A+B 和 C 15 61157/198112 (30.87%)
#include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
int i = 1;
while (n --)
{
long long a, b, c;
cin >> a >> b >> c;
if (a + b > c) cout << "Case #" << i++ << ": true" << endl;
else cout << "Case #" << i++ << ": false" << endl;
}
return 0;
}
1012 数字分类 20 40350/180425 (22.36%)
#include <iostream>
using namespace std;
const int N = 1010;
// sum2可能出现交错相加等于零的情况,注意一下
int main()
{
int n, a[N];
cin >> n;
int sum1 = 0, sum2 = 0, ret = 0, sum3 = 0, t = 0, max = 0;
int flag = 1;
int k = 0;
for (int i = 0; i < n; i ++ )
{
cin >> a[i];
// A1
if (a[i] % 5 == 0 && a[i] % 2 == 0) sum1 += a[i];
// A2
else if (a[i] % 5 == 1) {sum2 += flag * a[i], flag *= -1, k = 1;}
// A3
else if (a[i] % 5 == 2) ret ++;
// A4
else if (a[i] % 5 == 3) sum3 += a[i], t++;
// A5
else if(a[i] % 5 == 4 && max < a[i]) max = a[i];
}
double x;
if (sum3 > 0) x = (double)sum3 / t;
if (sum1) printf("%d",sum1);
else cout << "N";
if (k) printf(" %d",sum2);
else cout << " N";
if (ret) printf(" %d",ret);
else cout << " N";
if (sum3) printf(" %.1f",x);
else cout << " N";
if (max) printf(" %d\n",max);
else cout << " N";
return 0;
}
1013 数素数 20 42280/198712 (21.28%)
#include <iostream>
#include <cmath>
using namespace std;
const int N = 10010;
int main()
{
int m, n;
cin >> m >> n;
int k = 0, i = 1;
int a[N];
while (i ++)
{
bool isPrime = true;
for (int j = 2; j <= sqrt(i); j ++ )
if (i % j == 0)
isPrime = false;
if (isPrime) a[k ++] = i;
if (k > n) break;
}
int t = 0;
for (int i = m; i <= n; i ++ )
{
t ++;
cout << a[i - 1];
if (t < 10 && i < n) cout << " ";
else
{
t = 0;
cout << endl;
}
}
return 0;
}
1014 福尔摩斯的约会 20 33030/202066 (16.35%)
#include <iostream>
#include <vector>
using namespace std;
const string week[7] = {"MON","TUE","WED","THU","FRI","SAT","SUN"};
int hour(char a)
{
if (isdigit(a)) return a-'0';
else return a-'A'+10;
}
int main()
{
string a, b, c, d;
cin >> a >> b >> c >> d;
vector<char> e;
int k = 0;
if (a.size() > b.size()) swap(a, b);
if (c.size() > d.size()) swap(c, d);
// 星期的字母是A - G
for (int i = 0; i < a.size(); i ++ )
if (a[i] == b[i] && a[i] <= 'G' && a[i] >= 'A')
{
e.push_back(a[i]);
k = i;
break;
}
// 小时的字母是A - E
for (int i = k + 1; i < a.size(); i ++ )
if (a[i] == b[i] && ((a[i] <= 'N' && a[i] >= 'A') || isdigit(a[i])))
{
e.push_back(a[i]);
break;
}
for (int i = 0; i < c.size(); i ++ )
if (c[i] == d[i] && (isupper(c[i]) || islower(c[i])))
{
k = i;
break;
}
cout << week[e[0] - 'A'] << " ";
if (hour(e[1]) < 10) printf("0%d", hour(e[1]));
else printf("%d", hour(e[1]));
if (k < 10) printf(":0%d", k);
else printf(":%d", k);
return 0;
}
1015 德才论 25 28370/128811 (22.02%)
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
class info
{
public:
char nums[10];
int de_s, cai_s, sum;
int clas; // 等级
}stu[100010];
bool cmp(info a, info b)
{
if (a.clas != b.clas) return a.clas < b.clas;// 如果考生档次不同,按照从高到低
else if (a.sum != b.sum) return a.sum > b.sum; // 如果考生档次相同,按照总分从高到低排序
else if (a.de_s != b.de_s) return a.de_s > b.de_s;// 如果考生分数相同,按照德行分从高到底
else return strcmp(a.nums, b.nums) < 0; // 如果德行分相同,按照考生号排序
}
int main()
{
int N, L, H;
cin >> N >> L >> H;
int cnt = N;
for (int i = 0; i < N; i ++ )
{
cin >> stu[i].nums >> stu[i].de_s >> stu[i].cai_s;
stu[i].sum = stu[i].de_s + stu[i].cai_s;
// 德才兼亡,且无法及格
if(stu[i].de_s < L||stu[i].cai_s < L) {stu[i].clas = 5;cnt--;}
// 德才全尽
else if(stu[i].de_s >= H && stu[i].cai_s >= H) stu[i].clas = 1;
// 德胜才
else if(stu[i].de_s >= H && stu[i].cai_s < H) stu[i].clas = 2;
// 德才兼亡但尚有德胜才者
else if(stu[i].de_s < H && stu[i].cai_s <H && stu[i].de_s>=stu[i].cai_s) stu[i].clas = 3;
// 德才兼亡但才胜德
else stu[i].clas = 4;
}
cout << cnt << endl;
sort(stu,stu+N,cmp);
for(int i=0;i<cnt;i++)
printf("%s %d %d\n",stu[i].nums,stu[i].de_s,stu[i].cai_s);
return 0;
}
1016 部分A+B 15 45989/92469 (49.73%)
#include <iostream>
#include <cstring>
using namespace std;
const int N = 10;
int main()
{
char a[N], b[N], da, db;
cin >> a >> da >> b >> db;
int sum1 = 0, sum2 = 0;
for (int i = 0; i < strlen(a); i ++ )
if (a[i] == da)
sum1 = sum1 * 10 + (da - '0');
for (int i = 0; i < strlen(b); i ++ )
if (b[i] == db)
sum2 = sum2 * 10 + (db - '0');
sum1 = sum1 + sum2;
cout << sum1 << endl;
return 0;
}
1017 A除以B 20 31266/107527 (29.08%)
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
vector<int> div(vector<int> &A, int b, int &r)
{
vector<int> C;
r = 0;
for (int i = A.size() - 1; i >= 0; i -- )
{
r = r * 10 + A[i];
C.push_back(r / b);
r %= b;
}
reverse(C.begin(),C.end());
while (C.size() > 1 && C.back() == 0) C.pop_back();
return C;
}
int main()
{
string a;
int b;
cin >> a >> b;
vector<int> A;
for (int i = a.size() - 1; i >= 0; i -- ) A.push_back(a[i] - '0');
int r;
auto C = div(A, b, r);
for (int i = C.size() - 1; i >= 0; i -- ) cout << C[i];
cout << ' ' << r << endl;
return 0;
}
1018 锤子剪刀布 20 31034/113566 (27.33%)
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
int jiawin = 0, yiwin = 0;
int jia[3] = {0}, yi[3] = {0};
for (int i = 0; i < n; i++) {
char s, t;
cin >> s >> t;
if (s == 'B' && t == 'C') {
jiawin++;
jia[0]++;
} else if (s == 'B' && t == 'J') {
yiwin++;
yi[2]++;
} else if (s == 'C' && t == 'B') {
yiwin++;
yi[0]++;
} else if (s == 'C' && t == 'J') {
jiawin++;
jia[1]++;
} else if (s == 'J' && t == 'B') {
jiawin++;
jia[2]++;
} else if (s == 'J' && t == 'C') {
yiwin++;
yi[1]++;
}
}
cout << jiawin << " " << n - jiawin - yiwin << " " << yiwin << endl << yiwin << " " << n - jiawin - yiwin << " " << jiawin << endl;
int maxjia = jia[0] >= jia[1] ? 0 : 1;
maxjia = jia[maxjia] >= jia[2] ? maxjia : 2;
int maxyi = yi[0] >= yi[1] ? 0 : 1;
maxyi = yi[maxyi] >= yi[2] ? maxyi : 2;
char str[4] = {"BCJ"};
cout << str[maxjia] << " " << str[maxyi];
return 0;
}