当前位置:   article > 正文

2022秋 - C实验A类 –实验6 二维数组与字符数组_输入格式: 输入的第一行给出正整数n(1

输入格式: 输入的第一行给出正整数n(1

7-1 矩阵

给定一个n×n的方阵,本题要求计算该矩阵除副对角线、最后一列和最后一行以外的所有元素之和。副对角线为从矩阵的右上角至左下角的连线。

输入格式:

输入第一行给出正整数n(1<n≤10);随后n行,每行给出n个整数,其间以空格分隔。

输出格式:

在一行中给出该矩阵除副对角线、最后一列和最后一行以外的所有元素之和。

输入样例:

  1. 4
  2. 2 3 4 1
  3. 5 6 1 1
  4. 7 1 8 1
  5. 1 1 1 1

输出样例:

35

代码段:

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int n,i,j,sum=0;
  5. scanf("%d",&n);
  6. int a[n][n];
  7. int *p;
  8. p=a[0];
  9. for(i=0;i<n;i++)
  10. for(j=0;j<n;j++)
  11. {
  12. scanf("%d",p);
  13. p++;
  14. }
  15. for(i=0;i<n;i++)
  16. a[n-1][i]=0;
  17. for(i=0;i<n;i++)
  18. a[i][n-1]=0;
  19. for(i=0;i<n;i++)
  20. {
  21. j=n-i-1;
  22. a[j][i]=0;
  23. }
  24. for(i=0;i<n;i++)
  25. for(j=0;j<n;j++)
  26. sum+=a[i][j];
  27. printf("%d",sum);
  28. }

7-2 求矩阵的局部极大值

给定M行N列的整数矩阵A,如果A的非边界元素A[i][j]大于相邻的上下左右4个元素,那么就称元素A[i][j]是矩阵的局部极大值。本题要求给定矩阵的全部局部极大值及其所在的位置。

输入格式:

输入在第一行中给出矩阵A的行数M和列数N(3≤M,N≤20);最后M行,每行给出A在该行的N个元素的值。数字间以空格分隔。

输出格式:

每行按照“元素值 行号 列号”的格式输出一个局部极大值,其中行、列编号从1开始。要求按照行号递增输出;若同行有超过1个局部极大值,则该行按列号递增输出。若没有局部极大值,则输出“None 总行数 总列数”。

输入样例1:

  1. 4 5
  2. 1 1 1 1 1
  3. 1 3 9 3 1
  4. 1 5 3 5 1
  5. 1 1 1 1 1

输出样例1:

  1. 9 2 3
  2. 5 3 2
  3. 5 3 4

输入样例2:

  1. 3 5
  2. 1 1 1 1 1
  3. 9 3 9 9 1
  4. 1 5 3 5 1

输出样例2:

None 3 5

代码段:

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int m,n,i,j,count;
  5. scanf("%d %d\n",&m,&n);
  6. int a[m][n];
  7. int *p;
  8. p=a[0];
  9. for(i=0;i<m*n;i++)
  10. {
  11. scanf("%d",p);
  12. p++;
  13. }
  14. for(i=1;i<m-1;i++)
  15. for(j=1;j<n-1;j++)
  16. {
  17. if(a[i][j]>a[i+1][j]&&a[i][j]>a[i-1][j]&&a[i][j]>a[i][j+1]&&a[i][j]>a[i][j-1])
  18. {
  19. printf("%d %d %d\n",a[i][j],i+1,j+1);
  20. count++;
  21. }
  22. }
  23. if(count==0)
  24. printf("None %d %d",m,n);
  25. }

7-3 构建n阶幻方阵

幻方阵又称魔方阵,是将1~n×n的整数放置在1个n×n的方阵中(n的值为奇数),且保证每行、每列及主对角线、副对角线上的数值之和相等。

本题要求实现n-幻方阵(阶数最大为15),n的值从键盘读入。
N为奇数时,N幻方构造算法为:

(1) 将1放在第一行中间一列;

(2)从2开始直到n×n为止各数依次按下列规则存放:按右上方向行走,即每一个数存放的行比前一个数的行数减1,列数加1。

(3) 如果行列范围超出矩阵范围,则回绕。

(4) 如果按上面规则确定的位置上已有数,则将其放在上一个数的下面。

输入格式:

输入一个正奇数n。

输出格式:

按照样例的格式输出n级幻方阵,每列占4个字符,右对齐

输入样例:

5

输出样例:

  1. 17 24 1 8 15
  2. 23 5 7 14 16
  3. 4 6 13 20 22
  4. 10 12 19 21 3
  5. 11 18 25 2 9

代码段:

  1. #include<stdio.h>
  2. int main(){
  3. int n,i,sta,k,chu,kkk=1;
  4. scanf("%d",&n);
  5. int a[n][n];
  6. sta=(n-1)/2;
  7. chu=0;
  8. for(i=0,k=0;i<n*n;i++){
  9. a[chu][sta]=kkk;
  10. kkk++;k++;
  11. if(k==n){
  12. chu=chu+1;
  13. k=0;
  14. continue;//结束此次循环进入下一次
  15. }//此时下一个数输到当前数字的下方
  16. if(chu==0){
  17. chu=n-1;
  18. }//第一行转到最后一行
  19. else chu--;
  20. if(sta==n-1){
  21. sta=0;
  22. }//最后一列提到最前
  23. else sta++;
  24. }
  25. for(i=0;i<n;i++){
  26. for(k=0;k<n;k++){
  27. printf("%4d",a[i][k]);
  28. }
  29. printf("\n");
  30. }
  31. return 0;
  32. }

7-4 组个最小数

给定数字0-9各若干个。你可以以任意顺序排列这些数字,但必须全部使用。目标是使得最后得到的数尽可能小(注意0不能做首位)。例如:给定两个0,两个1,三个5,一个8,我们得到的最小的数就是10015558。

现给定数字,请编写程序输出能够组成的最小的数。

输入格式:

输入在一行中给出10个非负整数,顺序表示我们拥有数字0、数字1、……数字9的个数。整数间用一个空格分隔。10个数字的总个数不超过50,且至少拥有1个非0的数字。

输出格式:

在一行中输出能够组成的最小的数。

输入样例:

2 2 0 0 0 3 0 0 1 0

输出样例:

10015558

代码段:

  1. #include<stdio.h>
  2. int main()
  3. {
  4. int a[10],i,j,k;
  5. for(i=0;i<10;i++)
  6. scanf("%d",&a[i]);
  7. for(i=1;i<10;i++)
  8. if(a[i]>0)
  9. {
  10. printf("%d",i);
  11. a[i]--;
  12. break;
  13. }
  14. if(a[0]>0)
  15. for(k=0;k<a[0];k++)
  16. printf("0");
  17. for(j=0;j<a[i];j++)
  18. printf("%d",i);
  19. for(i++;i<10;i++)
  20. for(j=0;j<a[i];j++)
  21. printf("%d",i);
  22. printf("\n");
  23. return 0;
  24. }

7-5 字符串排序

本题要求编写程序,读入5个字符串,按由小到大的顺序输出。

输入格式:

输入为由空格分隔的5个非空字符串,每个字符串不包括空格、制表符、换行符等空白字符,长度小于80。

输出格式:

按照以下格式输出排序后的结果:

  1. After sorted:
  2. 每行一个字符串

输入样例:

red yellow blue black white

输出样例:

  1. After sorted:
  2. black
  3. blue
  4. red
  5. white
  6. yellow

代码段:

  1. #include <stdio.h>
  2. #include <string.h>
  3. int main()
  4. {
  5. char a[5][80];
  6. char s[80];
  7. int i,j;
  8. for(i=0;i<5;i++)
  9. scanf("%s",a[i]);
  10. for(i=0;i<4;i++)
  11. for(i=0;i<4;i++)
  12. {
  13. for(j=0;j<4;j++)
  14. {
  15. if(strcmp(a[j],a[j+1])>0)
  16. {
  17. strcpy(s,a[j]);
  18. strcpy(a[j],a[j+1]);
  19. strcpy(a[j+1],s);
  20. }
  21. }
  22. }
  23. printf("After sorted:\n");
  24. for(i=0;i<5;i++)
  25. printf("%s\n",a[i]);
  26. }

7-6 IP地址转换

一个IP地址是用四个字节(每个字节8个位)的二进制码组成。请将32位二进制码表示的IP地址转换为十进制格式表示的IP地址输出。

输入格式:

输入在一行中给出32位二进制字符串。

输出格式:

在一行中输出十进制格式的IP地址,其由4个十进制数组成(分别对应4个8位的二进制数),中间用“.”分隔开。

输入样例:

11001100100101000001010101110010

输出样例:

204.148.21.114

代码段:

  1. #include <stdio.h>
  2. int a[8]={128,64,32,16,8,4,2,1};
  3. int main(){
  4. char str[33];
  5. int ans1=0,ans2=0,ans3=0,ans4=0;
  6. scanf("%s",&str);
  7. for(int i=0;i<8;i++){
  8. ans1+=a[i%8]*(str[i]-'0');
  9. }
  10. for(int i=8;i<16;i++){
  11. ans2+=a[i%8]*(str[i]-'0');
  12. }
  13. for(int i=16;i<24;i++){
  14. ans3+=a[i%8]*(str[i]-'0');
  15. }
  16. for(int i=24;i<32;i++){
  17. ans4+=a[i%8]*(str[i]-'0');
  18. }
  19. printf("%d.%d.%d.%d",ans1,ans2,ans3,ans4);
  20. return 0;
  21. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/293067
推荐阅读
相关标签