- 数的输入和输出
(同2021年6月第1题) - 计算分数的浮点数值
(同2019年12月第2题) - 数字判断
(同2021年9月第3题) - 统计数
(同2021年12月第4题) - 硬币翻转
(同2021年6月第5题)
1.数的输入和输出
输入一个整数和双精度浮点数,先将浮点数保留2位小数输出,然后输出整数。
输入
一行两个数,分别为整数N(不超过整型范围),双精度浮点数F,以一个空格分开。
输出
一行两个数,分别为保留2位小数输出的F,以及整数N,以一个空格分开。
样例输入
100 123.456789
样例输出
123.46 100
参考范例
#include <stdio.h>
int main()
{
int N;
double F;
scanf("%d",&N);
scanf("%lf",&F);
printf("%.2lf ",F);
printf("%d ",N);
return 0;
}
2. 计算分数的浮点数值
两个整数a和b分别作为分子和分母,既分数 a/b ,求它的浮点数值(双精度浮点数,保留小数点后9位)
输入
仅一行,包括两个整数a和b(b不为0)
输出
也仅一行,分数 a/b 的浮点数值(双精度浮点数,保留小数点后9位)
样例输入
5 7
样例输出
0.714285714
参考范例
#include<stdio.h>
int main()
{
int a,b;
scanf("%d%d",&a,&b);
printf("%.9lf",1.0*a/b);
return 0;
}
3. 数字判断
输入一个字符,如果输入的字符是数字,输出yes, 否则输出no
输入
一个字符
输出
如果输入的字符是数字,输出yes, 否则输出no
样例输入
样例1输入:
5
样例2输入:
A
样例输出
样例1输出:
yes
样例2输出:
no
参考范例
#include <stdio.h>
int main()
{
char ch;
scanf("%c",&ch);
if(ch>='0'&&ch<='9')
printf("yes");
else
printf("no");
return 0;
}
4. 统计数
给定一个数的序列S,以及一个区间[L, R], 求序列中介于该区间的数的个数,即序列中大于等于L且小于等于R的数的个数。
输入
第一行3个整数n、L、R,分别表示序列的长度,区间的左端点,区间的右端点。(0 < n ≤ 10000, 1 ≤ L ≤ R ≤ 1000000)
第二行n个正整数,表示序列里的每一个数,每个数小于等于10000000
输出
输出一个整数,表示序列中大于等于L且小于等于R的数的个数。
样例输入
5 1 10
11 8 1 10 16
样例输出
3
参考范例
#include <stdio.h>
int main()
{
int n,l,r,s=0,x;
scanf("%d%d%d",&n,&l,&r);
for(int i=1;i<=n;i++)
{
scanf("%d",&x);
if(x>=l && x<=r)
s++;
}
printf("%d",s);
return 0;
}
5.硬币翻转
假设有N个硬币(N为不大于5000的正整数),从1到N按顺序依次编号,初始时全部处于正面向上的状态;有M个人(M为不大于N的正整数)也从1到M依次编号。
第一个人(1号)将硬币全部翻转一次,第二个人(2号)将编号为2的倍数的硬币翻转一次,第三个人(3号)将编号为3的倍数的硬币翻转一次。依照编号递增顺序,以后的人都和3号一样,将凡是自己编号倍数的硬币翻转一次。
请问:当第M个人操作之后,哪些硬币是正面向上的,按从小到大输出其编号,以空格分开。
输入
输入正整数N和M,以单个空格隔开。
输出
顺次输出正面向上的硬币的编号,其间用空格间隔。
样例输入
10 10
样例输出
2 3 5 6 7 8 10
参考范例
#include<stdio.h>
//此题与开关灯问题是同一问题
int main()
{
int N,M,i,sum=0;//N是硬币数,M是人数,i用于循环判断,
//sum是硬币被翻次数
scanf("%d %d",&N,&M);//按题目要求输入N和M
for( i=1;i<=N;i++)//从第个硬币开始遍历判断硬币状态
{
sum = 0 ;
for(int j=1;j<=i&&j<=M;j++)//每个硬币按人数遍历判断
{
if(i%j==0)//判断硬币编号是否人序号的倍数
{
sum++;//是人序号倍数则硬币被操翻次数加1
}
}
if(sum%2==0) //判断硬币被操翻次数是否偶数,是说明正面向上
printf("%d,",i);//输出该硬币编号和逗号
}
return 0;
}