💖系列文章:C语言简单题目

💖刷题网站(题目来源):牛客网

话不多说,直接进入我们的主题👇

空心正方形图案

解题思路:打印图形问题,老朋友了。发现题目的要求规律,进行循环控制打出图案即可。比如这道题,我们可以将之看成一个矩阵(二维数组)我们需要找出第一行和最后一行,第一列和最后一列打印成*号,其他位置为空格即可解决这道题

#include <stdio.h>
int main()
{
    int n = 0;
    while(~scanf("%d",&n))
    {
        int i =0;
        for(i=0;i<n;i++)
        {
            int j = 0;
            for(j=0;j<n;j++)
            {
                if(i==0||i==n-1||j==0||j==n-1)
                {
                    printf("* ");
                }
                else
                {
                    printf("  ");
                }
            }
            printf("\n");
        }
    }
    return 0;
}

提交运行:【C语言】牛客网题目练习-LMLPHP

公务员面试

解题思路:注意两个重要的点:

多组输入我们可以进行循环输入即可,注意循环终止的条件!

我们可以假设最大的分数为0,最小的分数为100,如果当前输入的分数是大于最大的分数就赋值给它,如果小于最小的分数就赋值给它,最终我们会得到一个最大的数和一个最小的数,然后减去即可,这道题难度不大。

#include <stdio.h>
int main()
{
    int score = 0;
    int i = 0;
    int sum = 0;
    int max = 0;
    int min = 100;
    int count = 0;
    while(scanf("%d",&score)!=EOF)
    {
        sum+=score;
        if(score>max)
            max = score;
        if(score<min)
            min = score;
        count++;
        if(count == 7)
        {
            printf("%.2f\n",(sum-max-min)/5.0);
            count = 0;
            max = 0;
            min = 100;
            sum = 0;
        }
    }

    return 0;
}

提交运行:【C语言】牛客网题目练习-LMLPHP

计算日期到天数转换

解题思路:我们都知道,在一年中1,3,5,7,8,10,12月都有31天。而4,6,9,11都有30天。最关键的问题在于2月的天数我们需要去判断是否为闰年。面对这么多种情况,我们可以用switch语句来进行条件判断,同时,要统计总的天数,case情况的放置我们也要按照从大到小进行放置,使之能够进行累加进来。有了思路之后,代码就能很好实现了:

#include <stdio.h>
int main()
{
    int year = 0;
    int m = 0;
    int day = 0;
    scanf("%d %d %d",&year,&m,&day);
    switch(m-1)
    {
        case 12: day+=31;
        case 11: day+=30;
        case 10: day+=31;
        case 9: day+=30;
        case 8:  day+=31;
        case 7: day+=31;
        case 6: day+=30;
        case 5: day+=31;
        case 4: day+=30;
        case 3: day+=31;
        case 2:
        if((year %4==0 &&year %100!=0)||year%400==0)
        {
            day+=29;
        }
        else
        {
            day+=28;
        }
        case 1: day+=31;
     break;
    }
    printf("%d",day);
    return 0;
}

提交运行:【C语言】牛客网题目练习-LMLPHP

等差数列

解题思路:等差数列首项为2,公差d=3,根据数学公式我们知道第n项为2+(n-1)*3。好了,有了这些做铺垫,我们可以用一个for循环来轻松解决这道题目。代码实现:

#include <stdio.h>
int main()
{
    int n = 0;
    int sum = 0;
    scanf("%d",&n);
    for(int i = 2;i<=(2+(n-1)*3);i+=3)
    {
        sum+=i;
    }
    printf("%d",sum);
    return 0;
}

提交运行:【C语言】牛客网题目练习-LMLPHP

记负均正

解题思路:本题较为简单,我们需要记录负数的个数,以及正数和的平均值。同时要注意到输出格式的控制。代码实现:

#include <stdio.h>
int main()
{
    int n= 0;
    scanf("%d",&n);
    int count1 = 0;
    int count2=0;
    float sum = 0;
    int arr[2000] = {0};
    for(int i = 0;i<n;i++)
    {
        scanf("%d",&arr[i]);
        if(arr[i]<0)
        {
            count1++;
        }
        if(arr[i]>0)
        {
            sum+=arr[i];
            count2++;
        }
    }
    if(count2 == 0)
    {
        printf("%d %0.1f\n",count1,0);
        return 0;
    }
    printf("%d %0.1f\n",count1,sum/count2);
    return 0;
}

提交运行:【C语言】牛客网题目练习-LMLPHP

旋转数组的最小数字

来波遍历找最小?NONONO,不是这样的,这道题的时间复杂度是有要求的。我们需要改变一下思路,基于二分查找的思想来解决这道题目:最小值左边递增,最小值右边也递增。且左边的元素都大于右边的元素

int minNumberInRotateArray(int* arr, int arrSize)
{
    int left = 0;
    int right = arrSize - 1;
    while(left < right)
    {
        int mid = (left + right) / 2;
        if(arr[mid] < arr[right])
            right = mid;
        else if(arr[mid] > arr[right])
            left = mid + 1;
        else
            right -=1;
    }
    return arr[left];
}

提交运行:【C语言】牛客网题目练习-LMLPHP


总结

07-11 09:36