全国信息学奥林匹克联赛(NOIP1010)复赛题目详解
- 题目1
- 思路
- 代码
- 题目2
- 思路
- 代码
- 题目3
- 思路
- 代码
- 题目4
- 思路
- 代码
本文所有代码均可放心食用
题目1
1.数字统计
(two.pas/c/cpp)
【问题描述】
请统计某个给定范围[L, R]的所有整数中,数字 2 出现的次数。
比如给定范围[2, 22],数字 2 在数 2 中出现了 1 次,在数 12 中出现 1 次,在数 20 中出现
1 次,在数 21 中出现 1 次,在数 22 中出现 2 次,所以数字 2 在该范围内一共出现了 6 次。
【输入】
输入文件名为 two.in。
输入共 1 行,为两个正整数 L 和 R,之间用一个空格隔开。
【输出】
输出文件名为 two.out。
输出共 1 行,表示数字 2 出现的次数。
【输入输出样例 1】
two.in two.out
2 22 6
【输入输出样例 2】
two.in two.out
2 100 20
【数据范围】
1 ≤ L ≤R≤ 10000。
思路
这道题只需要一个循环然后每一位%10后/10处理即可
例如:123%10=3!=2,123/10=12,12%10=2,12/10=1,1%10=1,1/10=0;
所以无论数字是几位数都可以这样处理
代码
#include
#include
#include
#include
using namespace std;
char s;
int n,m;
int main(){
freopen("two.pas.in","r",stdin);
freopen("two.pas.out","w",stdout);
cin>>n>>m;
int ans=0;
for(int i=n;i>t;
for(int i=1;i>m[i];
}
int c=t+1;
int ans=0;
while(cx2>>y2>>n;
for(int i=1;i>a>>b;
e[i].x=(x1-a)*(x1-a)+(yl-b)*(yl-b);
e[i].y=(x2-a)*(x2-a)+(y2-b)*(y2-b);//这里记录距离
}
sort(e+1,e+n+1);
int ans=e[n].x;//这里是为了处理当导弹只有1枚的结果
int c=0;
for(int i=n-1;i>=1;i--){
c=max(c,e[i+1].y);//如果加入的导弹到2的距离更大,那么更新数据,这里取最大值是因为当拦截了最远的导弹,那么其他的导弹就一起拦截了的
ans=min(ans,c+e[i].x);
}
cout
n;
for(int i=1;i
a[i][j];
a[j][i]=a[i][j];
}
}
int ans=0;
for(int i=1;i
a[i][n-1]?ans:a[i][n-1];//这里是要记录我们选择的默契值里最大的一个
}
cout
关注
打赏
