大家好我是沐曦希💕
文章目录
💥矩阵交换
题目链接: BC139 矩阵交换
🎇输入描述
第一行包含两个整数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列,为矩阵交换后的结果。每个数后面有一个空格。
🔭思路
创建一个数组arr[n][m]来存储数组。
当k=1,t为r,a=1,b=2时
当k=1,t为c,a=1,b=2时
当t为其他字母时,不需要处理。
当k不为1是,就需要循环来实现。
🎉代码
#include <stdio.h>
int main()
{
int n=0;//行
int m=0;//列
scanf("%d%d",&n,&m);
int i=0;
int j=0;
int a=0;//互换的行
int b=0;//互换的列
char t=0;//接收字符
int arr[10][10]={0};
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
scanf("%d",&arr[i][j]);
}
}
int k=0;//k次操作
scanf("%d",&k);
for(i=0;i<k;i++)
{
//读取操作指令
// 消耗 %d 后的所有后继空白符,然后读一个 char
scanf(" %c%d%d",&op,&a,&b);
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(i=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;
}
💥小乐乐改数字
题目链接:链接: BC116小乐乐改数字
描述
小乐乐喜欢数字,尤其喜欢0和1。他现在得到了一个数,想把每位的数变成0或1。如果某一位是奇数,就把它变成1,如果是偶数,那么就把它变成0。请你回答他最后得到的数是多少。
🎇输入描述
输入包含一个整数n (0 ≤ n ≤ 109)
🎆输出描述
输出一个整数,即小乐乐修改后得到的数字。
🔭思路
创建一个整型n接受输入,和一个整型ret来输出。
通过n%10来获得各个位数并且判断,判断之后各个修改后的位数通过乘10的n次方之和来获得ret
例如:
输入:222
输出:0
输入:123
输出103
🎉代码
//code1
#include<stdio.h>
#include<math.h>
int main()
{
int n = 0;
scanf("%d", &n);
int ret = 0;
int count = 0;
while (n)
{
int tmp = n % 10;
if (tmp % 2 == 0)
tmp = 0;
else
tmp = 1;
ret += tmp * pow(10, count++);
n /= 10;
}
printf("%d\n", ret);
return 0;
}
//code2
#include <stdio.h>
int main()
{
int n,m=0,t,x,k;
scanf("%d",&n);
for(k=1;n!=0;k=k*10)
{
t=n%10;
if(t%2==0) x=0;
else x=1;
m=x*k+m;
n=n/10;
}
printf("%d",m);
return 0;
}
💥求质数个数
题目链接: BC135 KiKi求质数个数
🎇描述
所有三位整数中,有多少个质数。
🎆输出描述
一行,一个整数,表示所有三位整数中,有多少个质数。
🔭思路
求质数可以通过for循环该数字%从2到该数字的平方根来判断。
🎉代码
#include<stdio.h>
#include<math.h>
int main()
{
int i, j;
int count = 0;
for (i = 101; i < 1000; i += 2)
{
for (j = 2; j < sqrt(i); j++)
{
if (i % j == 0)
{
break;
}
}
if (j > sqrt(i))
{
count++;
}
}
printf("%d", count);
return 0;
}
💥去重整数并排序
题目链接: BC136 KiKi去重整数并排序
🎡描述
给定一个整数序列,把其中的重复的整数去掉,并将去重后的序列从小到大排序输出。
🎇输入描述
第一行,输入一个整数n,表示序列有n个整数。
第二行输入n个整数(每个整数大于等于1,小于等于1000),整数之间用空格分隔。
🎆输出描述
去重并且从小到大排列的整数序列,整数之间用空格分隔。
🔭思路
方法一:先qsort或者冒泡排序,之后再去除重复的整型,把后面的整型往前挪。
方法二:直接定义一个m变量,令a[m]=m,可以避免重复,打印时只打印非0的。
🎉代码
//code1
#include <stdio.h>
//暴力求解
int cmp(const void* e1, const void* e2)
{
return (*(int*)e1 - *(int*)e2);
}
int main()
{
int n = 0;
int arr[1000] = {0};
scanf("%d", &n);
//接受n个数字
int i = 0;
for(i=0; i<n; i++)
{
scanf("%d", &arr[i]);
}
//处理
/*
//1. 排序 - 冒泡怕排序
//趟数
for(i=0; i<n-1; i++)
{
int j = 0;
for(j=0; j<n-1-i; j++)
{
if(arr[j] > arr[j+1])
{
int tmp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tmp;
}
}
}*/
qsort(arr,n,sizeof(arr[0]),cmp);
//2. 去重
//去重比较的对数数n-1
for(i=0; i<n-1; i++)
{
if(arr[i] == arr[i+1])
{
//把从i+1下标往后的元素全部往前覆盖
int k = 0;
for(k=i; k<n-1; k++)
{
arr[k] = arr[k+1];
}
n--;
i--;
}
}
//3. 打印
for(i=0; i<n; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
//code2
#include <stdio.h>
int main()
{
int n = 0;
int arr[1001] = {0};//1000
scanf("%d", &n);
//接受n个数字
int i = 0;
int m = 0;
for(i=0; i<n; i++)
{
scanf("%d", &m);
arr[m] = m;
}
for(i=0; i<=1000; i++)
{
if(arr[i] != 0)
{
printf("%d ", arr[i]);
}
}
return 0;
}
💥井字棋
题目链接:链接: BC110 井字棋
描述
KiKi和BoBo玩“井”字棋。也就是在九宫格中,只要任意行、列,或者任意对角线上面出现三个连续相同的棋子,就能获胜。请根据棋盘状态,判断当前输赢。
🎇输入描述
三行三列的字符元素,代表棋盘状态,字符元素用空格分开,代表当前棋盘,其中元素为K代表KiKi玩家的棋子,为O表示没有棋子,为B代表BoBo玩家的棋子。
🎆输出描述
如果KiKi获胜,输出“KiKi wins!”;
如果BoBo获胜,输出“BoBo wins!”;
如果没有获胜,输出“No winner!”。
🔭思路
创建一个二维数组来接受棋盘,通过对左角线,右对角线,,每一行和列是否有相同的三个字符来判断输赢,如果没有则平局。
例如:
输入:
K O B
O K B
B O K
输出:
KiKi wins!
🎉代码
#include<stdio.h>
char IsWin(char board[3][3],int row,int col)
{
int i = 0;
for (i = 0; i < row; i++)
{
if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][0] != 'O')
return board[i][0];
}
if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[0][0] != 'O')
return board[0][0];
if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[0][2] != 'O')
return board[0][2];
int j = 0;
for (j = 0; j < col; j++)
{
if (board[0][j] == board[1][j] && board[1][j] == board[2][j] && board[0][j] != 'O')
return board[0][j];
}
return 0;
}
int main()
{
char board[3][3]={0};
int i = 0;
int j = 0;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
scanf("%c",&board[i][j]);
getchar();
}
}
char ch = IsWin(board,3,3);
if(ch =='K')
printf("KiKi wins!");
else if(ch =='B')
printf("BoBo wins!");
else
printf("No winner!");
return 0;
}
💥杨辉三角
题目链接:BC109 杨辉三角
描述
杨辉三角,本质上是二项式(a+b)的n次方展开后各项的系数排成的三角形。其性质包括:每行的端点数为1, 一个数也为1;每个数等于它左上方和上方的两数之和。
🎇输入描述
第一行包含一个整数数n。 (1≤n≤30)
🎆输出描述
包含n行,为杨辉三角的前n行,每个数输出域宽为5。
🎠例子
输入:6
输出:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
🔭代码
#include<stdio.h>
int main() {
int n = 0;
scanf("%d", &n);
int i = 0;
int j = 0;
int arr[n][n];
arr[0][0] = 1;
for (i = 0; i < n; i++) {
arr[i][0] = 1;
if (i >= 2) {
for (j = 1; j < i; j++) {
arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
}
}
if (i >= 1)
arr[i][i] = 1;
}
for (i = 0; i < n; i++) {
for (j = 0; j <= i; j++) {
printf("%5d", arr[i][j]);
}
printf("\n");
}
return 0;
}
💫写在最后
友友们觉得不错的可以给个关注,点赞或者收藏哦!😘感谢各位友友们的支持。
你的❤️点赞是我创作的动力的源泉
你的✨收藏是我奋斗的方向
你的🙌关注是对我最大的支持
你的✏️评论是我前进的明灯
创作不易,希望大佬你支持一下小沐吧😘