「牛客网C」初学者入门训练BC139,BC158

简介: 题目: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为别的字符时不需要处理

🚀🚀🚀大家觉不错的话,就恳求大家点点关注,点点小爱心,指点指点🚀🚀🚀

题目: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为别的字符时不需要处理

事例1:

输入:

2 2

1 2

3 4

1

r 1 2


输出:

3 4

1 2

事例2:

输入:

2 2

1 3

6 8

2

c 1 2

t 1 2


输出:

3 1

8 6


说明:当t为别的字符时不需要处理,所以只交换了原矩阵的第1列和第2列。

解题思路:我们可以通过两个数进行交换值举一反三,交换两个数的值需要用临时变量保存其中一个值,矩阵行列交换时也是一样,创建一个数组长度和和列数相等(长度和行数相等)去保存所要交换行的数据(列的数据),这样就可以实现矩阵的行列交换了

解题详细过程:

1. #include<stdio.h>
2. int main(){
3. 
4.     int n=0,m=0;
5. printf("请输入矩阵\n");
6. scanf("%d %d",&n,&m);
7. int k=0;
8. int arr[n][m];
9. printf("请输入矩阵\n");
10. for(int i=0;i<n;i++){
11. for(int j=0;j<m;j++){
12. scanf("%d",&arr[i][j]);
13.         }
14.     }
15. printf("请输入操作几次\n");
16. scanf("%d",&k);
17. int a=0,b=0;
18. while(k--){
19. char temp=0;
20. getchar();//因为scanf输入数据时,会在缓冲区留下回车的数据,所以得用getchar()清除
21. printf("请输入操作符\n");
22. scanf("%c",&temp);
23. getchar();//因为scanf输入数据时,会在缓冲区留下回车的数据,所以得用getchar()清除
24. printf("请输入操作行列数\n");
25. scanf("%d %d",&a,&b);
26. int brr[m];//由于C99是支持变长数组的,创建数组用于保存a行的数据
27. if(temp=='r'){
28. for(int i=0;i<m;i++){
29.                 brr[i]=*(arr[a-1]+i);
30.                 }
31. for(int i=0;i<m;i++){
32.                 *(arr[a-1]+i)=*(arr[b-1]+i);
33.                 }
34. for(int i=0;i<m;i++){
35.                 *(arr[b-1]+i)=brr[i];
36.                 }
37.             }
38. int crr[n];//由于C99是支持变长数组的,创建数组用于保存a列的数据
39. if(temp=='c'){
40. for(int i=0;i<n;i++){
41.                 crr[i]=arr[i][a-1];
42.             }
43. for(int i=0;i<n;i++){
44.                 arr[i][a-1]=arr[i][b-1];
45.             }
46. for(int i=0;i<n;i++){
47.                 arr[i][b-1]=crr[i];
48.             }
49.         }
50.     }
51. for(int i=0;i<n;i++){
52. for(int j=0;j<m;j++){
53. printf("%d ",arr[i][j]);
54.         }
55. printf("\n");
56.     }
57. return 0;
58. }

题目:BC158回文数

难度:中等

描述:

若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数

例如:给定一个10进制数56,将56加65(即把56从右向左读),得到121是一个回文数。

又如:对于10进制数87:

STEP1:87+78  = 165                       STEP2:165+561 = 726

STEP3:726+627 = 1353                STEP4:1353+3531 = 4884

在这里的一步是指进行了一次N进制的加法,上例最少用了4步得到回文数4884。

写一个程序,给定一个N(2<=N<=10或N=16)进制数M(100位之内),求最少经过几步可以得到回文数。如果在30步以内(包含30步)不可能得到回文数,则输出“Impossible!”

进制N>10时,使用大写'A'字母表示10,'B'表示11,...,'F'表示15

输入描述:

两行,分别为N,M

输出描述:

STEP=ans

事例1:

输入:

9

87

输出:

STEP=6

解题思路:首先得把输入的不是十进制的数转换为十进制的数,然后实现一个函数去求它的回文数

解题详细过程:

1. #include<stdio.h>
2. #include<math.h>
3. #include<string.h>
4. int judge(long p){
5. long q=0;
6. long num=p;
7. long mul=p;
8. int count=0;
9. while(num){
10.         num=num/10;
11.         count++;
12.     }
13. while(p){
14.         q+=(p%10)*pow(10,count-1);
15.         count--;
16.         p/=10;
17.     }
18. if(mul==q){
19. return 1;
20.     }
21. return 0;
22. }
23. void HuiWen(long p){
24. long q=0;
25. int flag=0;
26. for(int i=0;i<30;i++){
27. long num=p;
28. int count=0;
29. while(num){
30.             num=num/10;
31.             count++;
32.         }
33. while(p){
34.             q+=(p%10)*pow(10,count-1);
35.             count--;
36.             p/=10;
37.         }
38.         p=q+p;
39. printf("p=%ld\n",p);
40. int ret=judge(p);
41. if(ret==1){
42. printf("STEP=%d\n",i);
43.             flag=1;
44. break;
45.         }
46.     }
47. if(flag==0){
48. printf("Impossible!\n");
49.     }
50. }
51. int main(){
52. printf("请输入进制数\n");
53. int N=0,M=0,i=0;
54. scanf("%d",&N);
55. long P=0;
56. if(N<=10&&N>1){//小于10进制的数
57. printf("请输入操作数\n");
58. scanf("%d",&M);
59. while(M){
60.             P+=(M%10)*pow(N,i);
61.             i++;
62.             M/=10;
63.         }
64. HuiWen(P);
65.     }
66. else if(N>10&&N<=16){//大于10的进制数
67. printf("请输入操作数\n");
68. char arr[100]={0};
69. getchar();
70. gets(arr);
71. int ret=(int)strlen(arr);
72. printf("操作数长度为");
73. printf("ret=%d \n",ret);
74. for(int k=0;k<ret;k++){
75. if(70<arr[k]||arr[k]<65){
76.                 P+=(arr[k]-48)*pow(N,ret-k-1);
77.             }
78. else{
79.                 P+=(arr[k]-55)*pow(N,ret-k-1);
80.             }
81.         }
82. printf("p的值为%ld\n",P);
83. HuiWen(P);
84.     }
85. else{
86. printf("只能计算2~16进制的数\n");
87.     }
88. return 0;
89. }

🌸🌸🌸如果大家还有不懂或者建议都可以发在评论区,我们共同探讨,共同学习,共同进步。谢谢大家! 🌸🌸🌸



相关文章
|
移动开发 前端开发 测试技术
关于前端AB实验,我是这么思考的
背景 大家好, 我是Fly哥, 这次分享的内容主要是关于ABtest ,我们是做用户增长的,说白了就是对应下面几个关键词。拉新、激活、留存,留存的话 又分为 次日留存、 3日留存,这些都是我们的指标, 但是产品设计一个需求的时候, 可能会有实验的性质,不确定哪一组实验,对于指标的反馈是正向的,或者是那一组实验的效果更加明显。 这时候产品就会去创建AB实验,然后拿线上的一部分流量,去做实验, 分析数据, 得出实验结论,然后看是否满足预期, 如果不满足 就暂停实验, 或者进行全量实验。 大家可以看下下面这张流程图: 图片 然后对于我们前端而言,我们关心的点只有两个 第一个就是接入ABtest,
关于前端AB实验,我是这么思考的
|
7月前
|
JavaScript Java 测试技术
基于Java的数学竞赛网站的设计与实现(源码+lw+部署文档+讲解等)
基于Java的数学竞赛网站的设计与实现(源码+lw+部署文档+讲解等)
46 0
|
Java 机器人 数据安全/隐私保护
蓝桥杯历届真题题目+解析+代码+答案(2013-2020)(JavaA、B、C组)(C++语言)(Python)
蓝桥杯历届真题题目+解析+代码+答案(2013-2020)(JavaA、B、C组)(C++语言)(Python)
349 0
|
网络协议 安全 算法
大网进阶安全刷题讲解(带答案)(1)(下)
大网进阶安全刷题讲解(带答案)(1)
107 0
|
网络协议 安全 算法
大网进阶安全刷题讲解(带答案)(1)(上)
大网进阶安全刷题讲解(带答案)(1)
93 0
|
机器学习/深度学习
「牛客网C」初学者入门训练BC134,​BC136​
题目:BC134 蛇形矩阵 难度:中等 描述: 给你一个整数n,输出n∗n的蛇形矩阵。 输入描述: 输入一行,包含一个整数n 输出描述: 输出n行,每行包含n个正整数,通过空格分隔。 1<=n<=1000 示例1
「牛客网C」初学者入门训练BC156
题目:BC156 牛牛的数组匹配 描述: 牛牛刚学会数组不久,他拿到两个数组 a 和 b,询问 b 的哪一段连续子数组之和与数组 a 之和最接近。 如果有多个子数组之和同样接近,输出起始点最靠左的数组。 输入描述: 第一行输入两个正整数 n 和 m ,表示数组 a 和 b 的长度。 第二第三行输入 n 个和 m 个正整数,表示数组中 a 和 b 的值。 输出描述: 输出子数组之和最接近 a 的子数组 示例1 输入:
|
存储 网络架构
写作工具可以替代笔记应用吗?我用 Ulysses 做了试验 | Matrix 精选
写作工具可以替代笔记应用吗?我用 Ulysses 做了试验 | Matrix 精选
232 0
|
算法 编译器 C++
C++学习——坚持(二)(1)
C++学习——坚持(二)
124 0
C++学习——坚持(二)(1)