一.门牌制作
1.题目描述
2.参考代码
#include<cstdio>
int main(){
int count=0;
int m;
for(int i=1;i<=2020;i++){
m=i;
while(m){
if(m%10==2){
count++;
}
m/=10;
}
}
printf("%d",count);
return 0;
}
3.运行结果
二.既约分数
1.题目描述
2.参考代码
#include<cstdio>
int gcd(int a,int b){ //也适合a<b这种情况
if(a%b==0){
return b;
}
else{
return gcd(b,a%b);
}
}
int main(){
int i,j,ans;
for(i=1;i<=2020;i++){
for(j=1;j<=2020;j++){
if(gcd(i,j)==1){
ans++;
}
}
}
printf("%d",ans);
return 0;
}
3.运行结果
三.蛇形填空
1.题目描述
2.参考代码
#include<cstdio>
int main(){
int i,ans=1;
for(i=1;i<=19;i++){
ans+=4*i;
}
printf("%d",ans);
return 0;
}
3.运行结果
四.跑步训练
1.题目描述
2.参考代码
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int month[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int sumkm=0;
int week=5;
int i,j,k;
for(i=0;i<21;i++)
{
month[1]=28;
if(i==0 || i==4 || i==8 || i==12 || i==16 || i==20) month[1]=29;
for(j=0;j<12;j++)
{
for(k=0;k<month[j];k++)
{
sumkm++;
week++;
if(week==8) week=1;
if(week == 1 || k==0) sumkm++;
if(i==20 && j==9 && k==0)
goto end;
}
}
}
end:
printf("%d",sumkm);
return 0;
}
五.七段码
1.题目描述
2.参考代码
#include <bits/stdc++.h>
using namespace std;
string str = "0000000";
string vis;
int ans = 0;
//如何检查排列是否合法?
int umap[7][7];
void initmap()
{
memset(umap, 0, sizeof(umap));
umap[0][1] = umap[0][5] = 1;
umap[1][0] = umap[1][2] = umap[1][6] = 1;
umap[2][1] = umap[2][3] = umap[2][6] = 1;
umap[3][2] = umap[3][4] = 1;
umap[4][3] = umap[4][5] = umap[4][6] = 1;
umap[5][0] = umap[5][4] = umap[5][6] = 1;
umap[6][1] = umap[6][2] = umap[6][4] = umap[6][5] = 1;
}
void dfs(int curr)
{
vis[curr] = '0';//标记访问过了
for (int j = 0; j < 7; ++j)
{
if (umap[curr][j] == 1 && vis[j] == '1')
dfs(j);
}
}
bool check()
{
int cnt = 0;
for (int i = 0; i < 7;++i)
{
if(vis[i]=='1')
{
dfs(i);
++cnt;
}
}
return cnt == 1;
}
int main()
{
initmap();
for (int i = 0; i < 7; ++i)
{
sort(str.begin(), str.end());
str[6 - i] = '1';
do
{
vis = str;
if(check())
++ans;
} while (next_permutation(str.begin(), str.end()));
}
cout << ans << endl;
return 0;
}
六.成绩统计
1.题目描述
小蓝给学生们组织了一场考试,卷面总分为 100 分,每个学生的得分都是一个 0 到 100 的整数。
如果得分至少是 60 分,则称为及格。如果得分至少为 85 分,则称为优秀。
请计算及格率和优秀率,用百分数表示,百分号前的部分四舍五入保留整 数。
输入描述
输入的第一行包含一个整数 n\ (1 \leq n \leq 10^4)n (1≤n≤10
4),表示考试人数。
接下来 n 行,每行包含一个 0 至 100 的整数,表示一个学生的得分。
输出描述
输出两行,每行一个百分数,分别表示及格率和优秀率。百分号前的部分 四舍五入保留整数。
输入输出样例
示例
输入
7
80
92
56
74
88
100
0
输出
71%
43%
2.参考代码
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
// 请在此输入您的代码
int n;
int i;
int youxiu=0,jige=0;
scanf("%d",&n);
for(i=0;i<n;i++){
int a;
scanf("%d",&a);
if(a>=85){
youxiu++;
}
if(a>=60){
jige++;
}
}
printf("%.0f%%\n",(jige*100.0)/n);
printf("%.0f%%",(youxiu*100.0)/n);
return 0;
}
七.回文日期
1.题目描述
2.参考代码
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int a,c,d;
int b[8],i;
scanf("%d",&a);
c=a;
d=a;
for(;;c++)
{a=c+1;
for(i=0;a!=0;a=a/10)
{ b[i]=a%10;
i++;}
if(b[0]==b[7]&&b[1]==b[6]&&b[2]==b[5]&&b[3]==b[4]&&b[5]!=0&&b[4]<=1&&b[6]<=2)
{printf("%d\n",c+1);
break;}}
for(;;d++)
{a=d+1;
for(i=0;a!=0;a=a/10)
{ b[i]=a%10;
i++;}
if(b[0]==b[7]&&b[0]==b[2]&&b[2]==b[5]&&b[1]==b[4]&&b[4]==b[3]&&b[3]==b[6]&&b[5]!=0&&b[4]<=1&&b[6]<=2)
{printf("%d\n",d+1);
break;}}
// 请在此输入您的代码
return 0;
}
八.子串分值和
1.题目描述
2.参考代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{
char s[10000];
int a,b=0,c=0,d=0;
scanf("%s",s);
char temp;
a=strlen(s);
int i,q,j=0;
for( i=0;i<a;i++)
{ j=i;
b=0;
while(j<a)
{ c=0;
for(int k=i;k<=j;k++)
{ q=0; temp=s[k];
for(int g=i;g<=j;g++)
{
if(temp==s[g])
q++;
}
if(q==1)
c++;
}
b=b+c;
j++;
}
d=b+d;
}
printf("%d",d);
return 0;
}
九.平面切分
1.题目描述
2.参考代码
#include <iostream>
using namespace std;
int main()
{
int n, a[1005],b[1005],c[1005][1005]={0};;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i]>>b[i];
c[a[i]][b[i]]++;
}
for(int i=1;i<=n;i++)
{
if(c[a[i]][b[i]]>1)
n=n-c[a[i]][b[i]]+1;
}
int num=2*n;
cout<<num<<endl;
// 请在此输入您的代码
return 0;
}
十.子串排序
1.题目描述
2.参考代码
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int i,m,t,j;
int n=0;
while((n*n-n)/2<100){ //求最坏情况下的字符串长度
n=n+1;
}
m=(n*n-n)/2-100;//比起完全逆序,字符串可以比完全逆序少m次比较
int arr[n];
for(i=0;i<n;i++){
arr[i]=97+n-i-1;//arr[]为完全逆序字符串
}
for(i=5;i>0;i--){
if(arr[i]<arr[i-1]){
t=arr[i];
arr[i]=arr[i-1];
arr[i-1]=t;
}
}
for(i=0;i<n;i++){
printf("%c",arr[i]);
}
return 0;
}