c语言之字符个数统计、 统计成绩、打印沙漏 、整数的分类处理 、不变初心数

字符个数统计

从键盘输入一串字符,统计出其中的英文字母个数、数字字符个数以及其他字符个数并输出。

输入格式:

输入一行字符,以回车结束。

输出格式:

输出英文字母个数、数字字符个数以及其他字符个数,中间用逗号进行分隔。

输入样例:

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;
}

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

名之以父

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值