C语言练习day7

数包含9的数 

包含数字9的数_牛客题霸_牛客网

题目:C语言练习day7_第1张图片

思路:首先,我们得生成1~2019之间的数字,其次再通过各个位数来比较是否等于9,若等于,则记录一次,反之,不记录。

代码演示:

C语言练习day7_第2张图片

注意:我第一次写的时候写成了while循环的样子,这个就会运行超时。

​
#include 
int main()
{
    int count = 0;
    for(int i = 1; i<= 2019; i++)
    {
        while(i)
        {
            i % 10 = 9;
            count++;
            i /= 10;
        }
    }
    printf("%d\n",count);
    return 0;
}

​

上面这个代码会运行超时,但是有一点我不明白,我在VS2022上运行半天居然没结果,好奇怪?希望大家可以帮我解答一下。

小乐乐算多少人被请家长

小乐乐算多少人被请家长_牛客题霸_牛客网

题目:C语言练习day7_第3张图片

思路:首先,定义一个变量代表小乐乐班上的总人数,再定义三个变量代表三个科目,再输入三个变量的值,我们可以再输入三个变量的时候就开始计算它们的平均数,再判断是否大于60,最后再输出被叫家长的人数。(如果我们不在输入时,计算它们的平均数,而是在后面去计算的话,就会导致计算的复杂。并且,我们在后面来计算的时候,就要先把前面的数据储存起来,那么就还要定义一个数组来储存这些数据,并且还要用循环来解决,可能也会导致运行不通过,所以我们选择在输入时计算,而且还不需要储存起来。)

 代码演示:C语言练习day7_第4张图片

水仙花数 

水仙花数_牛客题霸_牛客网

题目:C语言练习day7_第5张图片

思路:首先,我们要输入多组数据(m和n两个值), 其次题目要求输出的水仙花数必须大于等于m,并且小于等于n。如果有多个,则要从小到大排序,从前面这句话,我们就可以得出肯定需要一个循环来生成m~n之间的数字,在看看是否为水仙花数,若是则打印,而那个从小到大,我们也已经满足了(使循环产生的数字就是从小到大),最后题目要求如果在m~n之间没有水仙花数,就要打印no,这个其实也是比较好判断的,题目要求是在m~n之间,看看有无水仙花数,那么我们就在这个范围来判断,如果在该范围内什么也没有打印,那么就说明没有水仙花数,这肯定是要在循环外面的。其实,我们忽略了水仙花数的的判断(个位的立方加上十位的立方加上百位的立方等于原来的那个数,就是了)

代码演示:C语言练习day7_第6张图片

注意一下:count为什么是1呢?因为for循环两边都取了等号,就相当于是总共循环了n-m+1次(这个其实是根据数学里的数列公式来的,项数=末项-首项+1,而平时我们都是写小于n,现在是小于等于n,其实就是n与n-1的差别),所以我们的count最后就变成了n-m+1,而我们最后算的是n-m+1,因此要等于的话要么count-1,要么n-m的值在加1。

你可能感兴趣的:(C语言,c语言)