字符个数统计
从键盘输入一串字符,统计出其中的英文字母个数、数字字符个数以及其他字符个数并输出。
输入格式:
输入一行字符,以回车结束。
输出格式:
输出英文字母个数、数字字符个数以及其他字符个数,中间用逗号进行分隔。
输入样例:
abzxAXZ0123456789&&&&%%%@@@
输出样例:
7,10,10
#include<stdio.h>
int main()
{
int a, b, c;
char k;
a = 0;
b = 0;
c = 0;
while ((k = getchar()) != '\n')
{
if (('A' <= k && k <= 'Z') || ('a' <= k && k <= 'z'))
a++;
else
if ('0' <= k && k <= '9')
b++;
else
c++;
}
printf("%d,%d,%d", a, b, c);
return 0;
}
统计成绩
输入一个班的成绩,输出最高分、最低分和平均分。
输入格式
班级人数n (n>0)
n 名学生的成绩 s1,s2,⋯,sn (0≤si≤100,1≤i≤n)
输出格式
最高分、最低分、平均分
要求:所有分数只输出1位小数。
输入样例
15
98.5 67.3 45.5 90 75.2 65 77 99.5 20 100 80.5 69.5 88.5 66.5 87.5
输出样例
100.0 20.0 75.4
#include<stdio.h>
int main()
{
int number = 0;
scanf("%d", &number);
double grade = 0;
double max = 0;
double min = 100;
double sum = 0;
for (int i = 0; i < number; i++)
{
scanf("%lf", &grade);
sum += grade;
if (grade > max) max = grade;
if (grade < min) min = grade;
}
printf("%.1lf %.1lf %.1lf", max, min, sum / number);
return 0;
}
打印沙漏
本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印
*****
***
*
***
*****
所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。
给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。
输入格式:
输入在一行给出1个正整数N(≤1000)和一个符号,中间以空格分隔。
输出格式:
首先打印出由给定符号组成的最大的沙漏形状,最后在一行中输出剩下没用掉的符号数。
输入样例:
19 *
输出样例:
*****
***
*
***
*****
2
#include<stdio.h>
int main()
{
int hang, sum = -1, n, i, yu, b, k; char a;
scanf("%d %c", &n, &a);
for (i = 1;; i++)
{
sum = sum + 2 * (2 * i - 1);
if (n - sum < 0) break;
b = sum;
}
yu = n - b;
hang = i - 1;
for (i = hang; i > 0; i--)
{
for (k = hang - i; k > 0; k--)
printf(" ");
for (k = 1; k <= 2 * i - 1; k++)
printf("%c", a);
printf("\n");
}
for (i = 2; i <= hang; i++)
{
for (k = hang - i; k > 0; k--)
printf(" ");
for (k = 1; k <= 2 * i - 1; k++)
printf("%c", a);
printf("\n");
}
printf("%d", yu);
return 0;
}
整数的分类处理
给定 N 个正整数,要求你从中得到下列三种计算结果:
- A1 = 能被 3 整除的最大整数
- A2 = 存在整数 K 使之可以表示为 3K+1 的整数的个数
- A3 = 存在整数 K 使之可以表示为 3K+2 的所有整数的平均值(精确到小数点后 1 位)
输入格式:
输入首先在第一行给出一个正整数 N,随后一行给出 N 个正整数。所有数字都不超过 100,同行数字以空格分隔。
输出格式:
在一行中顺序输出 A1、A2、A3的值,其间以 1 个空格分隔。如果某个数字不存在,则对应输出NONE
。
输入样例 1:
8
5 8 7 6 9 1 3 10
输出样例 1:
9 3 6.5
输入样例 2:
8
15 18 7 6 9 1 3 10
输出样例 2:
18 3 NONE
#include <stdio.h>
int main()
{
int N,n,i,t,k,o,b;
float j=0;
scanf("%d",&N);
int a[N];
for (n=0;n<N;n++)
scanf("%d",&a[n]);
for(n=0;n<N-1;n++)
for(i=0;i<N-n-1;i++)
{
if(a[i]<a[i+1])
{
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
}
k=0;
for (n=0;n<N;n++)
{
if(a[n]%3==0){
printf("%d",a[n]);
k=1;
break;
}
}
if (k==0){
printf("NONE");
}
o=0;
j=0;
b=0;
for (n=0;n<N;n++)
{
if (a[n]%3==1){
o++;
}
if (a[n]%3==2){
j+=a[n];
b++;
}
}
if(o==0)
printf(" NONE");
else
printf(" %d",o);
if(b==0)
printf(" NONE");
else
printf(" %.1f",j/b);
return 0;
}
不变初心数
不变初心数是指这样一种特别的数,它分别乘 2、3、4、5、6、7、8、9 时,所得乘积各位数之和却不变。例如 18 就是这样的数:18 的 2 倍是 36,3+6=9;18 的 3 倍是 54,5+4=9;…… 18 的 9 倍是 162,1+6+2=9。对于 18 而言,9 就是它的初心。本题要求你判断任一个给定的数是否有不变的初心。
输入格式:
输入在第一行中给出一个正整数 N(≤ 100)。随后 N 行,每行给出一个不超过 105 的正整数。
输出格式:
对每个给定的数字,如果它有不变的初心,就在一行中输出它的初心;否则输出 NO
。
输入样例:
4
18
256
99792
88672
输出样例:
9
NO
36
NO
#include<stdio.h>
int main()
{
int t, c, f, a, n;
scanf("%d", &n);
while (n--)
{
scanf("%d", &a);
for (int i = 1; i <= 9; i++)
{
t = a * i;
f = 0;
if (i == 1)
{
c = 0;
while (t)
{
c += t % 10;
t /= 10;
}
}
else//与2~9相乘时
{
int b = 0;
while (t)
{
b += t % 10;
t /= 10;
}
if (b == c)
{
f = 1;
}
else break;
}
}
if (f == 0)printf("NO\n");
else printf("%d\n", c);
}
return 0;
}