前言
这些题目来自与一些刷题网站,以及c primer plus,继续练习
第一题
给你一个数,让他进行巴啦啦能量,沙鲁沙鲁,小魔仙大变身,如果进行变身的数不满足条件的话,就继续让他变身。。。直到满足条件为止。
巴啦啦能量,沙鲁沙鲁,小魔仙大变身:对于一个数,把他所有位上的数字进行加和,得到新的数。
如果这个数字是个位数的话,那么他就满足条件。
给一个整数数字n(1<=n<=1e9) 输出由n经过操作满足条件的数
1分析
哎呀其实思路很简单, int 类型的大小大概可以到20亿左右
而这里的n的大小只有10亿 只需使用int类型的整型即可
那它要一个整数的各位之和,当然如果大家从来没有做过这类题目可能要斟酌一下
但是我们一眼就看出来了 使用while循环 判断条件即为该数
限制条件就是对他除10, 循环内部对它求模可以得到它的个位数大小
一次进行就可以得到它的各位之和,然而它还可以大于10之后加一个判断这个题目就出来了
2代码实现
#include <stdio.h>
int Ifbecome(int x)
{
int flag=x;
while(1)
{
int a=0;
while(flag)
{
a+=flag%10;
flag/=10;
}
if(a<10)
return a;
else
flag=a;
}
}
int main() {
int a, b;
while (scanf("%d", &a) != EOF) {
printf("%d",Ifbecome(a));
}
return 0;
}
第二题
请统计某个给定范围[L, R]的所有整数中,数字2出现的次数
比如给定范围[2, 22],数字2在数2中出现了1次,在数12中出现1次,在数20中出现1次,在数21中出现1次,在数22中出现2次,所以数字2在该范围内一共出现了6次
输入共1行,为两个正整数L和R,之间用一个空格隔开。
输出共1行,表示数字2出现的次数。
1分析
这些题目还是很好的,用来打基础真的挺好
很明显和上个题目是有相似之处的 我们只要分别对范围内的数比较他们的各个位 数的大小与
2相判断即可 其实会上个题目 这个题目也会做
2,代码实现
#include <stdio.h>
int Count(int x)
{
int a=0;
while(x)
{
if(2==x%10)
a++;
x/=10;
}
return a;
}
int main() {
int a, b;
while (scanf("%d%d", &a,&b) != EOF) {
int i;
int j=0;
for(i=a;i<=b;i++)
{
j+=Count(i);
}
printf("%d",j);
}
return 0;
}
第三题
牛牛很喜欢发短信,他所用的通讯公司的收费方法如下:
1.每条短信收费0.1元
2.每条短息的字数不超过60字,如果超过60字,将按照0.2元的价格收费。
牛牛这个月发了 n 条短信,请问牛牛一共要缴多少短信费
第一行输入一个正整数 n ,表示发送短信的条数,
第二行输入 n 个正整数,表示牛牛发送的 n 条短信中每条短信的字数
输出牛牛这个月要缴的短信费
1分析
这个题目太简单了,简单的说一下
首先判断字数,一个if就行 然后注意得用浮点型来输出其他没什么
2代码实现
#include <stdio.h>
float Price(int x)
{
if(x>60)
{
return 0.2;
}
else
return 0.1;
}
int main() {
int a, b;
float c=0.0f;
while (scanf("%d", &a) != EOF) {
while(a)
{
scanf("%d",&b);
c+=Price(b);
a--;
}
printf("%.1f",c);
}
return 0;
}
第四题
牛牛刚刚学了素数的定义:素数值指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数
牛牛想知道在 [l,r] 范围内全部素数的和
输入两个正整数 l,r 表示闭区间范围 输出 [l,r] 范围内的素数的和
1分析怎么说素数的定义都告诉我们了 我们不就是让这个区间的数一直除以非1和非本身的数
只要不被整除,那么他就是素数
当然 我们可以有优化方案
就是说,在数学中只要一直除以它的算术平方根就行了
2代码实现
#include <stdio.h>
#include<math.h>
int Iszhishu(int x)
{
if(x==1)
return 0;
int i;
for(i=2;i<=sqrt(x);i++)
{
if(x%i==0)
return 0;
}
return x;
}
int main() {
int a, b;
while (scanf("%d %d", &a, &b) != EOF) {
int i;
int count=0;
for(i=a;i<=b;i++)
{
count+=Iszhishu(i);
}
printf("%d",count);
}
return 0;
}
第五题
前面几个题目来自于牛客网,大家可以去那里刷题,现在来看看比较基础的
接下来看 c primer plus的题目
设计一个函数min(x,y),返回两个double类型值的较小值
基础但是,多练
直接代码实现吧
#include<stdio.h>
double Min(double a,double b)
{
return a>b?b:a;
}
int main()
{
double a,b;
scanf("%lf %lf",&a,&b);
printf("%.2lf",Min(a,b));
return 0;
}
第六题
设计一个函数chline(ch,i,j)打印指定的字符i列j行
1分析这个题目很基础,没办法,题目是这样的,如果不会,建议你多多看书
2代码实现
#include<stdio.h>
void chline(char ch, int a, int b)
{
int i, j;
for (i = 0; i < a; i++)
{
for (j = 0; j < b; j++)
{
printf("%c", ch);
}
printf("\n");
}
}
int main()
{
while (1)
{
char ch;
int ch0;
int a, b;
printf("输入要打印的字符\n");
scanf("%c", &ch);
printf("输入要打印的行列\n");
scanf("%d%d", &a, &b);
chline(ch, a, b);
while ((ch0 = getchar()) && ch0 != '\n');
}
return 0;
}
3细节之处在于我们的万能清除缓存区最后一行的while中
通过这个函数可以把所有的"\n"清除防止被scanf接收到
虽然简单但是细节
我们发现这本书上的代码实践性更高
第七题
计算调和平均数先求两数的倒数,再求两个倒数的平均值,最后就算结果的倒数
直接代码实现
double Tiaohe(double x, double y)
{
//return 1/((1/x+1/y)/2);这个结果没有化简
return 2 / (1 / x + 1 / y);//化简后代码其实更高效
}
int main()
{
double a, b;
printf("请输入两个数\n");
scanf("%lf %lf", &a, &b);
double c=Tiaohe(a, b);
printf("%.2lf", c);
return 0;
}
值得注意的是,该调和平均数的算式可以化简,不要死算哦
第八题
编写一个函数,从标准输入中读取字符,直至遇到文件结尾程序得报告每个字符是否为字母
如果是还要报告字母在字母表的位置
再编写一个函数, 以一个字符为参数如果是字母返回一个数值位否则返回-1
没什么好说的代码
int Ifzimu(char ch);
void Readchar();
int main()
{
Readchar();
return 0;
}
void Readchar()
{
char ch;
while ((scanf("%c", &ch))==1)
{
int a=Ifzimu(ch);
if (a!=-1)
printf("%d ", a);
}
}
int Ifzimu(char ch)
{
if (ch >= 'A' && ch <= 'Z')
{
return (int)(ch - 'A' + 1);
}
else if (ch >= 'a' && ch <= 'z')
return (int)(ch - 'a' + 1);
else
return -1;
}
总结
今天的题目到此为止祝大家开心