C语言刷题训练

398 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第7天,点击查看活动详情

前言🙉

这是一个新的频道,之后把我写的一些C语言题目分享到这里。这些C语言的题目我会分享我的思路,如果有更好的方法也可以一起讨论啊。更新时间不定。码字不易,感谢大家支持!

矩阵转置🍍

==题目描述:== KiKi有一个矩阵,他想知道转置后的矩阵(将矩阵的行列互换得到的新矩阵称为转置矩阵),请编程帮他解答。

输入描述: 第一行包含两个整数n和m,表示一个矩阵包含n行m列,用空格分隔。 (1≤n≤10,1≤m≤10) 从2到n+1行,每行输入m个整数(范围-231~231-1),用空格分隔,共输入n*m个数,表示第一个矩阵中的元素。

输出描述: 输出m行n列,为矩阵转置后的结果。每个数后面有一个空格。

输出示例: 在这里插入图片描述

==我的思路:== 看到这个题首先创建一个二维数组然后倒置输出。只要把行和列的顺序倒过来输出就行。

代码如下:

#include<stdio.h>
int main()
{
    int r=0;//行
    int c=0;//列
    int i=0;
    int j=0;
    scanf("%d %d",&r,&c);
   char arr1[r][c];
    for(i=0;i<r;i++)
    {
        for(j=0;j<c;j++)
        {
            scanf("%d ",&arr1[i][j]);
        }
    }
     for(i=0;i<c;i++)
    {
        for(j=0;j<r;j++)
        {
            printf("%d ",arr1[j][i]);
        }
         printf("\n");
     }
    return 0;
}

有序序列判断🍊

==题目描述:== 输入一个整数序列,判断是否是有序序列,有序,指序列中的整数从小到大排序或者从大到小排序(相同元素也视为有序)。

输入描述: 第一行输入一个整数N(3≤N≤50)。 第二行输入N个整数,用空格分隔N个整数。

输出描述: 输出为一行,如果序列有序输出sorted,否则输出unsorted。

输出示例:在这里插入图片描述

==我的思路:== 这个题比较简单,输入要判断的数,把这些数放到一个整型数组中。可以先判断下标为0和下标为1的数,如果下标为0大于下标为1的数,就判断后面的数是否都大于前面的数,如果后面的数有一个小于的数就返回1。返回1表示输出unsorted。同理,如果下标为0小于下标为1的数,就判断后面的数是否都小于前面的数,如果后面的数有一个大于的数就返回1,输出unsorted。

代码如下:

#include<stdio.h>
int main()
{
    int n=0;
    int i=0;
    int flag=0;
    scanf("%d\n",&n);
    int arr[50]={0};
    for(i=0;i<n;i++)
    {
       scanf("%d ",&arr[i]);
    }
    for(i=1;i<n;i++)
    {
         if(arr[0]<arr[1])
        {
            if(arr[i-1] > arr[i])
            {
                flag = 1;
            }
        }
        if(arr[0] > arr [1])
        {
            if(arr[i-1] < arr[i])
            {
                flag = 1;
            }
        }
    }   
    if(flag==1)
    {
        printf("unsorted\n");
    }
    else
    {
        printf("sorted\n");
    }
    return 0;
}

上三角矩阵判定🍋

==题目描述:== KiKi想知道一个n阶方矩是否为上三角矩阵,请帮他编程判定。上三角矩阵即主对角线以下的元素都为0的矩阵,主对角线为从矩阵的左上角至右下角的连线。

输入描述: 第一行包含一个整数n,表示一个方阵包含n行n列,用空格分隔。 (1≤n≤10) 从2到n+1行,每行输入n个整数(范围-231~231-1),用空格分隔,共输入n*n个数。

输出描述: 一行,如果输入方阵是上三角矩阵输出"YES"并换行,否则输出"NO"并换行。

输出示例:在这里插入图片描述

==我的思路:== 这个题可以创建n行n列的二维数组,只需判断对角线以下的所有数都为0,就是上三角矩阵。这里要注意对角线以下有非零的数,要返回0

代码如下:

#include<stdio.h>
int main()
{
    int n=0;
    scanf("%d ",&n);
    int i=0;
    int j=0;
    int arr[50][50]={0};
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            scanf("%d ",&arr[i][j]);
        }
    }
    //判断下三角是否为0
    int sum=0;
      for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
          if(j<i)
          {
           if(arr[i][j]!=0)
           {
                printf("NO\n"); 
               return 0;
           }
          }
        }
    }
printf("YES\n");   
    return 0;
}

写在最后:🍰码字不易,如果对你有帮助的话,给个三连或者关注一下吧🍓,感谢支持!🧀