题目A 符合条件的数
时间限制 1.00s
内存限制 128.00MB
AC代码 (暴力枚举即可):
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
int n, k;
int main()
{
cin >> n >> k;
for (int i = n; i <= 1000000000; i++)
{
int cnt = 0;
int q = i;
while (q)
{
int t = q % 10;
if (t == 3)
{
cnt++;
}
q /= 10;
}
if (cnt == k)
{
cout << i ;
return 0;
}
}
return 0;
}
题目B 选代表
时间限制 1.00s
内存限制 128.00MB
AC 代码 (利用辅助数组st去重):
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
const int N = 20005;
int n;
int a[N];
bool st[105];
int cnt = 0;
int main()
{
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> a[i];
}
for (int i = 0; i < n; i++)
{
if (!st[a[i]] && a[i]!= 0)
{
cout << a[i] << " ";
st[a[i]] = true;
}
}
return 0;
}
题目C 成绩统计
时间限制 1.00s
内存限制 128.00MB
AC代码(结构体排序 重载运算符即可):
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
using namespace std;
const int N = 105;
int n;
struct student
{
string name;
int ave; // 平时成绩
int exam; // 期末成绩
int mark; // 总评
int num;// 编号
bool operator < (const student& t)const
{
if (mark != t.mark)return mark > t.mark;
else return num < t.num;
}
}stu[N];
int cnt = 0;
int main()
{
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> stu[i].name >> stu[i].ave >> stu[i].exam;
stu[i].num = i;
stu[i].mark = (int)(round((int)(ceil((sqrt(stu[i].exam) * 10))) * 0.6 + 0.4 * stu[i].ave));
// 注意向上取整 和 四舍五入
}
sort(stu, stu + n); // 排序
for (int i = 0; i < n; i++)
{
cout << stu[i].name << " " << stu[i].mark << endl;
}
return 0;
}
题目D 背答案
时间限制 1.00s
内存限制 500.00MB
AC代码:
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
const int N = 105;
int n, q;
struct question
{
string quest;
string answ;
}qst[N];
struct answer
{
string task;
string a;
string b;
string c;
string d;
}ans[N];
int main()
{
cin >> n >> q;
for (int i = 0; i < n; i++)
{
cin >> qst[i].quest >> qst[i].answ;
}
for (int i = 0; i < q; i++)
{
cin >> ans[i].task >> ans[i].a >> ans[i].b >> ans[i].c >> ans[i].d;
for (int j = 0; j < n; j++)
{
if (qst[j].quest == ans[i].task)
{
if (qst[j].answ == ans[i].a)
{
cout << 'A' << endl;
}
if (qst[j].answ == ans[i].b)
{
cout << 'B' << endl;
}
if (qst[j].answ == ans[i].c)
{
cout << 'C' << endl;
}
if (qst[j].answ == ans[i].d)
{
cout << 'D' << endl;
}
}
}
}
return 0;
}
题目E 击鼓传花
时间限制 1.00s
内存限制 500.00MB
AC代码(直接模拟 或者dfs):
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
const int N = 1000005;
int n, m, k;
int a[N];
int st[N]; //st数组表示当前编号同学是否有花 有花:1 无花:0 如果值是2,说明花已经重新传到自己手中
int cnt = 0;
int main()
{
cin >> n >> m >> k;
for (int i = 0; i < m; i++)
{
cin >> a[i];
if (!st[a[i]])
{
st[a[i]] = 1;
}
else
{
continue;
}
int j = 1;
while (st[a[i]] <= 1) // 不断往后传 步长为k的位置,直到花又传到自己手中停止
{
st[(a[i] + j * k) % n]++;
j++;
}
}
// 直接枚举没有花的同学编号。
for (int i = 0; i < n; i++)
{
if (!st[i])cnt++;
}
cout << cnt << endl;
return 0;
}