1.矩阵转置
1°题目链接
2°思路
打印的时候m和n i和j换一下位置就可以了
循环的i j不变
3°实现
#include <stdio.h>
int main()
{
int n = 0;
int m = 0;
scanf("%d%d", &n, &m);
int a[1000][1000];
int i = 0;
int j = 0;
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
{
scanf("%d", &a[i][j]);
}
}
//转置
for (i = 0; i < m; i++)//3
{
for (j = 0; j < n; j++)//2
{
printf("%d ", a[j][i]);
}
printf("\n");
}
return 0;
}
4°运行结果
2.矩阵交换
1°题目链接
2°思路
n行m列
交换k次 写一个循环次数为k次的外循环
接下来分类:r就交换行 c就交换列
交换行的时候可以通过下标得到行号
列号需要遍历 加一个外循环 循环m次
交换列的时候可以通过下标得到列号
行号需要遍历 加一个外循环 循环n次
3°实现
#include<stdio.h>
int main()
{
int n = 0;
int m = 0;
int arr[10][10] = { 0 };
scanf("%d %d", &n, &m);
int i = 0;
int j = 0;
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
{
scanf("%d", &arr[i][j]);
}
}
int k = 0;
scanf("%d", &k);
char t = 0;
int a = 0;
int b = 0;
for (i = 0; i < k; i++)
{
//每一次操作的过程
scanf(" %c %d %d", &t, &a, &b);//%c前空格消耗回车
if (t == 'r')//交换行
{
//每一列交换
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')//交换列
{
//每一行交换
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]);
}
printf("\n");
}
return 0;
}
4°运行结果
3.杨辉三角
1°题目链接
2°思路
找规律
3°实现
#include <stdio.h>
int main()
{
int arr[30][30] = { 0 };
int i = 0;
int j = 0;
int n = 0;
scanf("%d", &n);
for (i = 0; i < n; i++)
{
for (j = 0; j <= i; j++)
{
if (i == j)
arr[i][j] = 1;
if (j == 0)
arr[i][j] = 1;
if (i > 1 && j > 0)
arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
}
}
for (i = 0; i < n; i++)
{
for (j = 0; j <= i; j++)
{
printf("%5d", arr[i][j]);
}
printf("\n");
}
return 0;
}
4°运行结果
4.井字棋
1°题目链接
2°思路
字符用flag接收 flag初始化为字符0
获胜条件是行 列和对角线都是同一个字符
先判断行 列 对角线是否有相等的
行列都可以遍历进行判断 对角线两种情况写一下
如果有相等的把任意一个给到flag 最后通过flag来判断获胜情况
flag如果是字符K KiKi赢
flag如果是字符B BoBo赢
flag如果是字符0 平局
3°实现
#include<stdio.h>
int main()
{
char arr[3][3] = { 0 };
int i = 0;
int j = 0;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
scanf("%c", &arr[i][j]);
getchar();//吸收\n
}
}
char flag = 'O';
for (i = 0; i < 3; i++)
{
//行
if (arr[i][0] == arr[i][1] && arr[i][1] == arr[i][2] && arr[i][1] != 'O')
{
flag = arr[i][1];
break;
}
//列
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 (flag == 'K')
{
printf("KiKi wins!\n");
}
else if (flag == 'B')
{
printf("BoBo wins!\n");
}
else
{
printf("No winner!\n");
}
return 0;
}
4°运行结果
5.小乐乐与进制转换
1°题目链接
2°思路
十进制的时候%10 /10可以拿到每一位
六进制同理 %6 /6可以拿到每一位
每一位存放到数组里面 直接打印数组元素
3°实现
#include<stdio.h>//m进制 %n /n可以拿出每一位
int main()
{
int n = 0;
int arr[40] = { 0 };
scanf("%d", &n);
int i = 0;
while (n)
{
arr[i] = n % 6;
i++;
n = n / 6;
}//从个位开始取
for (i--; i >= 0; i--)//最后一下i会加加 因此i要-- 才会对应最后一个元素 倒着打印
{
printf("%d", arr[i]);
}
return 0;
}
4°运行结果
#8C OJ练习八#完