【C语言】编程初学者入门训练(13)

文章目录

  • 121. 小乐乐算最高分
  • 122. 小乐乐计算求和
  • 123. 小乐乐计算函数
  • 124. 小乐乐查找数字
  • 125. kiki学程序设计基础
  • 126. kiki算期末成绩
  • 127. kiki说祝福语
  • 128. kiki的最高分
  • 129. 求质数的个数
  • 130. kiki去重整数并排序

121. 小乐乐算最高分

  • 问题描述:小乐乐的老师BoBo想知道班级中谁的数学成绩最高,请编程帮他实现。
  • 输入描述:共两行
    • 第一行输入一个数n,代表小乐乐的班级中n个同学。
    • 第二行输入n个数,用空格相隔,代表班级中每个人的数学成绩。
  • 输出描述:一个整数,代表班级中最高的数学成绩。
  • 示例
输入:3
	99 89 39
输出:99
  • 代码实现:
#include 
int main()
{
        int n,score,max = 0;
        scanf("%d",&n);

        for(int i = 0;i < n;i++)
        {
                scanf("%d",&score);
                if(score > max)
                {
                        max = score;
                }
        }
        printf("%d\n",max);
        return 0;
}

122. 小乐乐计算求和

  • 问题描述:小乐乐想计算一下1!+2!+3!+…+n!。
  • 输入描述:一行,一个整数n。
  • 输出描述:一行,一个整数,表示1!+2!+3!+…+n!的结果。
  • 示例
    • 输入:3
    • 输出:9
  • 备注:结果范围在int类型范围之内
  • 代码实现
#include 
int main()
{
        int n;
        int ch = 1,sum = 0;
        scanf("%d",&n);

        for(int i = 1;i <= n;i++)
        {
                ch *= i;
                sum += ch;
        }
        printf("%d\n",sum);

        return 0;
}

123. 小乐乐计算函数

  • 问题描述:小乐乐学会了自定义函数,BoBo老师给他出了个问题,根据以下公式计算m的值。其中 max3函数为计算三个数的最大值,如: max3(1, 2, 3) 返回结果为3。

在这里插入图片描述

  • 输入描述:一行,输入三个整数,用空格隔开,分别表示a, b, c。
  • 输出描述:一行,一个浮点数,小数点保留2位,为计算后m的值。
  • 示例
    • 输入:1 2 3
    • 输出:0.30
  • 代码实现
#include 
float max3(int a,int b,int c)
{
        if(a > b && a > c)      return a;

        else if(b > a && b > c) return b;
        
        else                    return c;
}
int main()
{
        int a,b,c;
        scanf("%d %d %d",&a,&b,&c);

        float m = max3(a+b,b,c) / (max3(a,b+c,c)+max3(a,b,b+c));
        printf("%.2f\n",m);

        return 0;
}

124. 小乐乐查找数字

  • 问题描述:给定n个整数和一个整数x,小乐乐想从n个整数中判断x出现几次,请编程帮他实现。
  • 输入描述:共3行
    • 第一行,一个整数,表示n(1 <= n <= 100)。
    • 第二行,共输入n个整数,两个整数之间用空格分隔。
    • 第三行,输入一个整数,表示要查找的整数x。
  • 输出描述:一行,表示整数x出现的次数。
  • 示例
输入:5
	1 1 2 1 3
	1
输出:3
  • 代码实现
#include 
int main()
{
        int n,x,i,count = 0;
        int arr[100] = {0};
        scanf("%d",&n);
        for(i = 0;i < n;i++)
        {
                scanf("%d",&arr[i]);
        }
        scanf("%d",&x);

        for(i = 0;i < n;i++)
        {
                if(x == arr[i])
                {
                        count++ ;
                }
        }
        printf("%d\n",count);
        return 0;
}

125. kiki学程序设计基础

  • 问题描述:BoBo老师教了KiKi学习程序设计基础,他知道C++是带类的C语言,这个“++”主要包含三部分内容:对C语言进行语法上的扩展、面向对象(封装、继承和多态),STL(即模板)。这学期KiKi学习了C和C++,学好他们,其他编程语言都可以很轻松掌握。C和C++的输入有区别,请帮KiKi输出C和C++输出Hello world的代码。

  • 输入描述:无

  • 输出描述

printf("Hello world!\n");
cout << "Hello world!" << endl;
  • 代码实现:
#include 
int main()
{
        printf("printf(\"Hello world!\\n\");\n");
        printf("cout << \"Hello world!\" << endl;");//这里有四个空格

        return 0;
}

126. kiki算期末成绩

  • 问题描述:KiKi这学期努力学习程序设计基础,要期末考试了,BoBo老师告诉他,总成绩包括四个部分,如下:总成绩 = 实验成绩 * 20% + 课堂表现成绩 * 10% + 过程考核成绩 * 20% + 期末上机考试成绩 * 50%,现在输入KiKi的各项成绩,请计算KiKi的总成绩。
  • 输入描述:一行,包括四个整数(百分制),用空格分隔,分别表示实验成绩,课堂表现成绩,过程考核成绩,期末上机考试成绩。
  • 输出描述:一行,总成绩,保留小数点一位。
  • 示例
    • 输入:100 100 90 80
    • 输出:88.0
  • 代码实现
#include 
int main()
{
        float sum = 0;
        int a,b,c,d;
        scanf("%d %d %d %d",&a,&b,&c,&d);
        
        sum = a*0.2 + b*0.1 + c*0.2 + d*0.5;
        printf("%.1f\n",sum);

        return 0;
}

127. kiki说祝福语

  • 问题描述:2020年来到了,KiKi要对他的n位好朋友说n遍”Happy new year!Good luck!”的祝福语。

  • 输入描述:输入只有一行,其中含有一个正整数 n(1≤n≤20),代表KiKi说祝福话的遍数。

  • 输出描述:输出 n 行"Happy new year!Good luck!"。

  • 示例

输入:2
输出:
	Happy new year!Good luck!
	Happy new year!Good luck!
  • 代码实现
#include 
int main()
{
        int n;
        scanf("%d",&n);

        for(int i = 0;i < n;i++)
        {
                printf("Happy new year!Good luck!\n");
        }
        return 0;
}

128. kiki的最高分

  • 问题描述:KiKi知道了大一三科比较重要课程的分数,包括:程序设计基础,高数,英语,请编程帮他找到三科中的最高分。
  • 输入描述:一行,三个整数,用空格分隔,代表三科成绩。
  • 输出描述:一行,一个整数,代表输入三科分数中的最高分数。
  • 示例
    • 输入:90 88 99
    • 输出:99
  • 代码实现
#include 
int MAX3(int a,int b,int c)
{
        if(a > b && a > c)
                return a;
        else if(b > a && b > c)
                return b;
        else
                return c;
}
int main()
{
        int a,b,c;
        scanf("%d %d %d",&a,&b,&c);
        printf("%d\n",MAX3(a,b,c));

        return 0;
}

129. 求质数的个数

  • 问题描述:KiKi知道了什么是质数(只能被1和他自身整除的数),他现在想知道所有三位整数中,有多少个质数。
  • 输入描述:无
  • 输出描述:一行,一个整数,表示所有三位整数中,有多少个质数。
  • 代码实现
#include 

//是素数则返回1,否则返回0
int is_prime(int i)
{       
        //拿2到i-1之间的数去试除i
        for(int j = 2;j < i-1;j++)
        {
                if(0 == i % j)
                {
                        return 0;
                }
        }
        return 1;
}
int main()
{
        int count = 0;
        for(int i = 100;i <= 999;i++)
        {
                //判断i是否为素数
                if(1 == is_prime(i))
                {
                        count++ ;
                }
        }
        printf("%d\n",count);
        return 0;
}

130. kiki去重整数并排序

  • 问题描述:给定一个整数序列,KiKi想把其中的重复的整数去掉,并将去重后的序列从小到大排序输出。
  • 输入描述
    • 第一行,输入一个整数n,表示序列有n个整数。
    • 第二行输入n个整数(每个整数大于等于1,小于等于1000),整数之间用空格分隔。
  • 输出描述:去重并且从小到大排列的整数序列,整数之间用空格分隔。
  • 示例
输入:6
	5 3 3 4 2 2
输出:2 3 4 5
  • 代码实现1:暴力求解
    • 先利用冒泡排序将序列从小到大先排好序;
    • 在让相邻的两个元素进行比较,如果出现重复的元素,则让后面的元素往前挪动覆盖掉重复的元素。当有n个元素的时候,要去重则最多要比较n-1对元素。
#include 
int main()
{
        int n,i;
        int arr[1000]= {0};
        scanf("%d",&n);

        for(i = 0;i < n;i++)
        {
                scanf("%d ",&arr[i]);
        }
        //先排序再去重
        for(i = 0;i < n-1;i++)//冒泡排序
        {
                for(int j = 0;j < n-i-1;j++)
                {
                        if(arr[j] > arr[j+1])
                        {
                                int t = arr[j];
                                arr[j] = arr[j+1];
                                arr[j+1]= t;
                        }
                }
        }
        //去重
        for(i = 0;i < n-1;i++)//取中最多比较的次数为n-1次
        {
                if(arr[i] == arr[i+1])
                {
                        //把从i+1往后的元素统统往前覆盖
                        for(int k = i;k < n-1;k++)
                        {
                                arr[k] = arr[k+1];
                        }
                        n--;//去重了一个元素,要少一个元素
                        i--;//让i还是保持i+1的位置
                }
        }
        //打印
        for(i = 0;i < n;i++)
        {
                printf("%d ",arr[i]);
        }
        return 0;
}
  • 代码实现2:拿空间换时间
    • 既然输入的数字不超过一千,那么就创建一个1001大小的数组(1001才有下标1000),然后将数组完全初始化为0;
    • 按照输入的数字来存放进数组中,如:输入1则存在下标为1的地方,这样如果后面再出现1则继续存在下标1处,就能将重复的数字去掉了;
    • 当循环结束的时候,此时不仅去完重了同时也排好序了,再从前往后将数组中非0的元素全部打印出来就搞定了。
#include 
int main()
{
        int n,i;
        int arr[1001] = {0};
        scanf("%d",&n);

        for(i = 0;i < n;i++)
        {
                int m;
                scanf("%d",&m);
                arr[m] = m;
        }
        for(i = 0;i <= 1000;i++)
        {
                if(0 != arr[i])
                {
                        printf("%d ",arr[i]);
                }
        }
        putchar('\n');
        return 0;
}

你可能感兴趣的:(C语言编程初学者入门训练,c语言,算法,开发语言)