当前位置: 首页 > news >正文

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

文章目录

  • 101. 矩阵相等判定
  • 102. 上三角矩阵判定
  • 103. 矩阵转置
  • 104. 矩阵交换
  • 105. 杨辉三角
  • 106. 井字棋
  • 107. 小乐乐与进制转换
  • 108. 小乐乐求和
  • 109. 小乐乐定闹钟
  • 110. 小乐乐排电梯

101. 矩阵相等判定

  • 问题描述:KiKi得到了两个n行m列的矩阵,他想知道两个矩阵是否相等,请你回答他。(当两个矩阵对应数组元素都相等时两个矩阵相等)。

  • 输入描述

    • 第一行包含两个整数n和m,表示两个矩阵包含n行m列,用空格分隔。
    • 从2到n+1行,每行输入m个整数(范围-231~231-1),用空格分隔,共输入n*m个数,表示第一个矩阵中的元素。
    • 从n+2行到2n+1,每行输入m个整数(范围-231~231-1),用空格分隔,共输入n*m个数,表示第二个矩阵中的元素。
    • 1 < n,m < 10
  • 输出描述:一行,如果两个矩阵相等输出"Yes"并换行,否则输出"No"并换行。

  • 示例

输入:2 21 23 41 23 4
输出:Yes
  • 代码实现
#include <stdio.h>
int main()
{int n,m,i,j;int arr1[10][10]= {0};int arr2[10][10]= {0};scanf("%d %d",&n,&m);//录入第一个矩阵for(i = 0;i < n;i++){for(j = 0;j < m;j++){scanf("%d",&arr1[i][j]);}}//录入第二个矩阵for(i = 0;i < n;i++){for(j = 0;j < m;j++){scanf("%d",&arr2[i][j]);}}//比较两个数组对应位置的元素for(i = 0;i < n;i++){for(j = 0;j < m;j++){if(arr1[i][j] != arr2[i][j]){printf("No\n");return 0;}}}printf("Yes\n");return 0;
}

102. 上三角矩阵判定

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

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

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

  • 示例

输入:31 2 30 4 50 0 6
输出:YES
  • 解题思路:对角线以下的元素都是 0 的,则为上三角矩阵。
    • 所有为 0 元素的坐标的特点是:i > j,也就是说只要判断当 i > j 时的所有元素是否为 0 即可。

在这里插入图片描述

  • 代码实现
#include <stdio.h>
int main()
{int n,i,j;int arr[10][10];scanf("%d",&n);for(i = 0;i < n;i++){for(j = 0;j < n;j++){scanf("%d",&arr[i][j]);}}for(i = 0;i < n;i++){for(j = 0;j < n;j++){if(i > j){if(0 != arr[i][j]){printf("NO\n");return 0;}}}}printf("YES\n");return 0;
}

103. 矩阵转置

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

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

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

  • 示例

输入:2 31 2 34 5 6
输出:1 4 2 5 3 6 
  • 解题思路:原来的列变成行,行则变成列。

  • 代码实现

#include <stdio.h>
int main()
{int n,m,i,j;int arr[10][10];scanf("%d %d",&n,&m);for(i = 0;i < n;i++){for(j = 0;j < m;j++){scanf("%d",&arr[i][j]);}}for(i = 0;i < m;i++){for(j = 0;j < n;j++){printf("%d ",arr[j][i]);//行变成了用j控制,列则由i控制}putchar('\n');}      return 0;
}

104. 矩阵交换

  • 问题描述:KiKi有一个矩阵,他想知道经过k次行变换或列变换后得到的矩阵。请编程帮他解答。
  • 输入描述
    • 第一行包含两个整数n和m,表示一个矩阵包含n行m列,用空格分隔。 (1≤n≤10,1≤m≤10)
    • 从2到n+1行,每行输入m个整数(范围-231~231-1),用空格分隔,共输入n*m个数,表示第一个矩阵中的元素。
    • 接下来一行输入k,表示要执行k次操作(1≤k≤5)。接下来有k行,每行包括一个字符t和两个数a和b,中间用空格格分隔,t代表需要执行的操作,当t为字符’r’时代表进行行变换,当t为字符’c’时代表进行列变换,a和b为需要互换的行或列(1≤a≤b≤n≤10,1≤a≤b≤m≤10)。
    • 提示:当t为别的字符时不需要处理
  • 输出描述:输出n行m列,为矩阵交换后的结果。每个数后面有一个空格。
  • 示例1
    输入:
	2 21 23 41r 1 2
输出:3 4 1 2 
  • 示例2
输入:2 21 36 82c 1 2t 1 2
  • 代码实现
#include <stdio.h>
int main()
{int n,m,i,j;int arr[10][10];scanf("%d %d",&n,&m);for(i = 0;i < n;i++){for(j = 0;j < m;j++){scanf("%d",&arr[i][j]);}}	int k;//操作k次	scanf("%d",&k);//k\n,输入k次之后敲回车还剩个\nchar t;int  a,b;for(i = 0;i < k;i++)//每一次操作的过程{scanf(" %c %d %d",&t,&a,&b);//%c前多个空格能消化掉上面剩下的\n//不让t接收到的值变成\nif(t == 'r')//交换a和b行{for(j = 0;j < m;j++){int tmp = arr[a-1][j];arr[a-1][j]= arr[b-1][j];arr[b-1][j]= tmp;}}else if(t == 'c')//交换a和b列{for(j = 0;j < n;j++){int tmp = arr[j][a-1];arr[j][a-1]= arr[j][b-1];arr[j][b-1]= tmp;}}		}//交换完之后打印for(i = 0;i < n;i++){for(j = 0;j < m;j++){printf("%d ",arr[i][j]);}putchar('\n');}return 0;
}

105. 杨辉三角

  • 问题描述:KiKi知道什么叫杨辉三角之后对杨辉三角产生了浓厚的兴趣,他想知道杨辉三角的前n行,请编程帮他解答。杨辉三角,本质上是二项式(a+b)的n次方展开后各项的系数排成的三角形。其性质包括:每行的端点数为1, 一个数也为1;每个数等于它左上方和上方的两数之和。

  • 输入描述:第一行包含一个整数数n。 (1≤n≤30)

  • 输出描述:包含n行,为杨辉三角的前n行,每个数输出域宽为5。

  • 示例

输入:6
输出:11    11    2    11    3    3    11    4    6    4    11    5   10   10    5    1
  • 解题思路
    • 前提:每行端点与结尾的数为1。
    • 每个数为上方的两数之和,且头两行无需计算全都是1。
    • 行列相等的位置的值为1。
    • 在框起来的三角形内行都是>=2的,列都是>=1的。当行列都在范围内的时候才需要去计算。

在这里插入图片描述

  • 代码实现
#include <stdio.h>
int main()
{int n,i,j;int arr[30][30];scanf("%d",&n);for(i = 0;i < n;i++){for(j = 0;j < n;j++){if(0 == j)//将第0列的值置为1{arr[i][j] = 1;}if(i == j)//将对角线的值置为1{arr[i][j] = 1;}if(i >= 2 && j >= 1){arr[i][j] = arr[i-1][j-1]+ arr[i-1][j];}}}for(i = 0;i < n;i++){//要打印三角形,i打印多少j就打印多少for(j = 0;j <= i;j++){printf("%5d",arr[i][j]);}putchar('\n');}return 0;
}

106. 井字棋

  • 问题描述:KiKi 和 BoBo 玩 “井”字棋。也就是在九宫格中,只要任意行、列,或者任意对角线上面出现三个连续相同的棋子,就能获胜。请根据棋盘状态,判断当前输赢。
  • 输入描述:三行三列的字符元素,代表棋盘状态,字符元素用空格分开,代表当前棋盘,其中元素为K代表KiKi玩家的棋子,为O表示没有棋子,为B代表BoBo玩家的棋子。
  • 输出描述
    • 如果KiKi获胜,输出“KiKi wins!”;
    • 如果BoBo获胜,输出“BoBo wins!”;
    • 如果没有获胜,输出“No winner!”。
  • 示例
输入:K O BO K BB O K
输出:KiKi wins!
  • 解题思路:判断横3、竖3、对角线上的元素是否相等即可。
  • 代码实现
#include <stdio.h>
int main()
{int i,j;char arr[3][3];for(i = 0;i < 3;i++){for(j = 0;j < 3;j++){scanf(" %c",&arr[i][j]);//记得消化掉按下回车之后剩余的\n}}//判断输赢char flag = 'O';for(i = 0;i < 3;i++){//判断某一行的三个是否相等且不为'O'if(arr[i][0]==arr[i][1]&&arr[i][1]==arr[i][2]&&arr[i][1]!='O'){flag = arr[i][1];break;}//判断某一列的三个是否相等且不为'O'if(arr[0][i]==arr[1][i]&&arr[1][i]==arr[2][i]&&arr[1][i]!='O'){flag = arr[1][i];break;}}//判断对角线上的三个是否相等if(arr[0][0]== arr[1][1]&&arr[1][1]==arr[2][2]&&arr[1][1]!='O'){flag = arr[1][1];}//判断另一条对角线if(arr[0][2]== arr[1][1]&&arr[1][1]==arr[2][0]&&arr[1][1]!='O'){flag = arr[1][1];}if('K' == flag)			printf("KiKi wins!\n");else if('B' == flag)	printf("BoBo wins!\n");else					printf("No winner!\n");return 0;
}

107. 小乐乐与进制转换

  • 问题描述:小乐乐在课上学习了二进制八进制与十六进制后,对进制转换产生了浓厚的兴趣。因为他的幸运数字是6,所以他想知道一个数表示为六进制后的结果。请你帮助他解决这个问题。

  • 输入描述:输入一个正整数n (1 ≤ n ≤ 109)

  • 输出描述:输出一行,为正整数n表示为六进制的结果

  • 示例1

    • 输入:6
    • 输出:10
  • 示例2

    • 输入:120
    • 输出:320
  • 解题思路

    • 先让输入的数 n % 6 得到当前数转换成六进制的最低位;
    • 然后让 n / 6,用得到的结果继续 % 6 获得第二低位;
    • 不停重复上述步骤,直到 n / 6 的结果为 0 为止。
    • 最后将得出的结果翻转过来,就是十进制转六进制的最终结果。

在这里插入图片描述

  • 代码实现
#include <stdio.h>
int main()
{int n,i = 0;int arr[40];//将%6,/6后得到的结果存起来scanf("%d",&n);//转换while(n)//如果n不为0,说明还有能拿下来的位{arr[i] = n % 6;i++ ;n = n / 6;//去掉最低位}for(i--;i >= 0;i--){printf("%d",arr[i]);//将得到的数翻转过来就是6进制}return 0;
}

108. 小乐乐求和

  • 问题描述:小乐乐最近接触了求和符号Σ,他想计算在这里插入图片描述
    的结果。但是小乐乐很笨,请你帮助他解答。

  • 输入描述:输入一个正整数n (1 ≤ n ≤ 109)

  • 输出描述:输出一个值,为求和结果。

  • 示例1

    • 输入:1
    • 输出:1
  • 示例2

    • 输入:10
    • 输出:55
  • 代码实现1

#include <stdio.h>
int main()
{long long n,sum = 0;scanf("%lld",&n);for(int i = 1;i <= n;i++){sum += i;}printf("%lld\n",sum);return 0;
}
  • 代码实现2
    • 等差数列公式:(1 + n) * n / 2
#include <stdio.h>
int main()
{long long n;    scanf("%lld",&n);printf("%lld\n",(1+n)*n/2);return 0;
}

109. 小乐乐定闹钟

  • 问题描述:小乐乐比较懒惰,他现在想睡觉,然后再去学习。他知道现在的时刻,以及自己要睡的时长,想设定一个闹钟叫他起床学习,但是他太笨了,不知道应该把闹钟设定在哪个时刻,请你帮助他。(只考虑时和分,不考虑日期)

  • 输入描述:输入现在的时刻以及要睡的时长k(单位:minute),中间用空格分开。

  • 输入格式:hour:minute k(如hour或minute的值为1,输入为1,而不是01),(0 ≤ hour ≤ 23,0 ≤ minute ≤ 59,1 ≤ k ≤ 109)。

  • 输出描述:对于每组输入,输出闹钟应该设定的时刻,输出格式为标准时刻表示法(即时和分都是由两位表示,位数不够用前导0补齐)。

  • 示例1

    • 输入:0:0 100
    • 输出:01:40
  • 示例2

    • 输入:1:0 200
    • 输出:04:20
  • 解题思路:用 k / 60 得到的结果就是对应的小时数,用 k % 60 得到的结果则是对应的分钟数。

  • 代码实现

#include <stdio.h>
int main()
{int h,m,k;scanf("%d:%d %d",&h,&m,&k);h = (h + (m + k) / 60) % 24;//转小时转成24进制m = (m + k) % 60;//将分钟转成60进制printf("%02d:%02d\n",h,m);return 0;
}

110. 小乐乐排电梯

  • 问题描述:小乐乐学校教学楼的电梯前排了很多人,他的前面有n个人在等电梯。电梯每次可以乘坐12人,每次上下需要的时间为4分钟(上需要2分钟,下需要2分钟)。请帮助小乐乐计算还需要多少分钟才能乘电梯到达楼上。(假设最初电梯在1层)

  • 输入描述:输入包含一个整数n (0 ≤ n ≤ 109)

  • 输出描述:输出一个整数,即小乐乐到达楼上需要的时间。

  • 示例1

    • 输入:1
    • 输出:2
  • 示例2

    • 输入:12
    • 输出:6
  • 代码实现;

#include <stdio.h>
int main()
{int n;scanf("%d",&n);printf("%d\n",(n / 12)*4 + 2);//n / 12得出需要上下几趟电梯,//然后* 4得出轮到乐乐上电梯时的时间,//再加上小乐乐上去的两分钟return 0;
}
http://www.lryc.cn/news/7656.html

相关文章:

  • HTTP 1.1响应码
  • 常用设计模式介绍
  • 关于货物物品横竖摆放的问题
  • 人员定位需求多,场景目标各不同
  • 怎么解决首屏加载速度过慢的问题
  • 3d视觉相关论文阅读目录汇总
  • 最简单的计算机视觉
  • 泛微采知连,为组织提供安全、合规、智能的数字化文控系统
  • Python if else对缩进的要求
  • java常用设计模式
  • 死锁(5.1)
  • Python 之 Matplotlib 第一个绘图程序和基本方法
  • 数据结构与算法(一):概述
  • Spring3之Bean的属性详解
  • C语言之结构体内存的计算
  • Java网络编程之UDP和TCP套接字
  • Linux进程信号产生以及捕捉
  • 11. GLSL(OpenGL Shader Language)常用知识点汇总
  • 转发一张网络工程师考试的试卷2021.5.15
  • AMD发布23.2.1 新驱动 支持开年新作《魔咒之地》
  • 开放平台如何做接口的签名和加解密?
  • Mr. Cappuccino的第40杯咖啡——Kubernetes之Pod生命周期
  • 记一次OOM
  • idea插件生成dao类service类controller类以及mapper.xml
  • DML 数据操作语言
  • PySpark实战一之入门
  • 【DockerCE】Docker-CE 23.0.1正式版发布
  • vscode开发的Vue家用电器维修服务系统nodejs+mysql
  • PyQt5数据库开发1 4.2 配置SQL Server 2008 数据源(ODBC编程)
  • 【JavaEE】多线程代码实例:单例模式与阻塞队列BlockingQueue