博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
二维数组
阅读量:4580 次
发布时间:2019-06-09

本文共 8386 字,大约阅读时间需要 27 分钟。

Description

有一个n行n列的二维数组,n以及数组中的所有数据均由键盘输入,求主对角线之上(右上方)所有数据之和

Input

输入n(2<=n<=10)的值,以及二维数组所有元素的值

Output

输出题目要求的数值

Sample Input

3 1 2 3 4 5 6 7 8 9

Sample Output

11 
 

#include<stdio.h>

int main()

{
int n;
int i,j,a[10][10],sum=0;
scanf("%d",&n);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%d",&a[i][j]);
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
sum+=a[i][j];
printf("%d\n",sum);
return 0;
}

 

Description

 

由键盘给一个3行4列的二维数组输入数据,然后找出每行中的最大数及其位置

 

Input

 

输入12个整数

 

Output

 

输出每行的最大数及其行列号

 

Sample Input

 

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

 

Sample Output

 

4:1,4 8:2,1 6:3,3
 

#include<stdio.h>

int main()

{
int a[3][4],i,j,m,p,q;
for(i=0;i<3;i++)
for(j=0;j<4;j++)
scanf("%d",&a[i][j]);
for(i=0;i<3;i++)
{
m=a[i][0];
p=i+1;
q=1;
for(j=0;j<4;j++)
if(a[i][j]>m)
{
m=a[i][j];
p=i+1;
q=j+1;
}
printf("%d:%d,%d\n",m,p,q);
}
return 0;
}

 

Description

键盘输入9个整数存入3行3列的二维数组中,请找出最大值和最小值(最大值和最小值都只有一个),并将它们分别交换到各自对称的位置。若最大数或最小数在主对角线上,则不需要交换,在原位置不动。

解释:

  1、主对角线:下面的数据中,“1,5,9”所处的一条线就是主对角线。

     1  2  3

     4  5  6

     7  8  9

  2、所谓对称位置,是相对于主对角线而言的。例如:上面9个数中,2和4对称,6和8对称,3和7对称

Input

输入9个整数

Output

输出交换后数组中的数据,共三行,每行三个数据,相邻两个数据之间用1个空格隔开

 

#include<stdio.h>

int main()
{
int a[3][3],i,j,max,min;
int k,s,m,n,p,q;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
scanf("%d",(*(a+i)+j));
max=min=a[0][0];
for(i=0;i<3;i++)
{ for(j=0;j<3;j++)
{
if(a[i][j]>=max)
{
max=a[i][j];
k=i;
s=j;
}
if(a[i][j]<=min)
{
min=a[i][j];
m=i;
n=j;
}
}
}
if((k!=n)||(s!=m))
{
if(k!=s)
{
p=a[k][s];
a[k][s]=a[s][k];
a[s][k]=p;
}
if(m!=n)
{
q=a[m][n];
a[m][n]=a[n][m];
a[n][m]=q;
}
}
else if((k==n)&&(s==m))
{
p=a[k][s];
a[k][s]=a[s][k];
a[s][k]=p;
}
for(i=0;i<3;i++)
{
for(j=0;j<2;j++)
printf("%d ",*(*(a+i)+j));
printf("%d",*(*(a+i)+2));
printf("\n");
}
return 0;
}

 
 
 

Description

 有两个分别是a*b(a行b列)和b*c(b行c列)的矩阵,相乘后是一个a*c的矩阵,a,b,c及矩阵数据均由键盘输入,a,b,c均不超过10,请编程输出相乘后的矩阵。

下面是2*3矩阵和3*2矩阵相乘的一个例子:

1  2  3     1  2       1*1+2*3+3*5  1*2+2*4+3*6     22  28    

         *  3  4   =                             =                                      

4  5  6     5  6       4*1+5*3+6*5  4*2+5*4+6*6     49  64 

Input

 

Output

 

Sample Input

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

Sample Output

43 63 55 78
 

#include <stdio.h>

int main()
{
int m[10][10],n[10][10],k[10][10];
int a,b,c,i,j,t;
scanf("%d %d %d",&a,&b,&c);
for(i=0;i<a;i++)
{
for(j=0;j<b;j++)
{
scanf("%d",&m[i][j]);
}
}
for(i=0;i<b;i++)
{
for(j=0;j<c;j++)
{
scanf("%d",&n[i][j]);
}
}
for(i=0;i<a;i++)
{
for(j=0;j<c;j++)
{
k[i][j]=0;
}
}
for(i=0;i<a;i++)
{
for(j=0;j<c;j++)
{
for(t=0;t<b;t++)
{
k[i][j]=k[i][j]+m[i][t]*n[t][j];
}
}
}
for(i=0;i<a;i++)
{
for(j=0;j<c-1;j++)
{
printf("%d ",k[i][j]);
}
printf("%d\n",k[i][j]);
}
return 0;
}

 
 

Description

键盘输入一个3行4列的整型二维数组a[3][4]的数据,找出鞍点。所谓鞍点,就是该位置上的数,在它所在行最大(没有跟它相等的数),在它所在列最小(没有跟它相等的数)。

注意:也可能没有鞍点。若没有鞍点,输出:“not exist”

Input

输入二维数组的所有数据

Output

输出鞍点,或输出not exist

Sample Input

-1 -2 -3 -4 2 3 8 9 10 -10 6 45

Sample Output

a[0][0]=-1 

Sample Output

3 2 7 4 5 6 1 8 9
 

Description

键盘输入一个N*N的矩阵,将其转置(行变列,列变行)

如:
1   2   3
4   5   6
7   8   9

转置后:

1   4   7
2   5   8
3   6   9

请在下面程序框架的基础上编程:

#include <stdio.h>
int main()
{
     int n,i,j,t,a[100][100];
     scanf("%d",&n);
     for(i=0;i<n;i++)
          for(j=0;j<n;j++)
               scanf("%d", &a[i][j]);   
     /********************************************************/    
     //只允许在此填写代码,其他任何地方不得修改,也不允许定义任何变量或数组
     /********************************************************/
     for(i=0; i<=n-1;i++)
     {
          for(j=0;j<=n-1;j++)
               printf("%5d", a[i][j]) ;
          printf("\n");
     }  
     return 0;
}

Input

键盘输入一个n(1<=n<=100),代表行数和列数,接着输入n行数据,每行n个

Output

输出转置后的数据,每个数据至少占5格

Sample Input

3 1 2 3 4 5 6 7 8 9

Sample Output

1 4 7 2 5 8 3 6 9 

 

#include <stdio.h>

int main(void)
{
int n,i,j,t,a[100][100];
scanf("%d",&n);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%d", &a[i][j]);
for(i=0;i<n;i++)
for(j=0;j<i;j++)
{
t=a[i][j];
a[i][j]=a[j][i];
a[j][i]=t;}
for(i=0;i<=n-1;i++)
{
for(j=0;j<=n-1;j++)
printf("%5d",a[i][j]);
printf("\n");
}
return 0;
}

Description

 设有如下代码:

int main()

{

      /*****************************************************/

     //只允许在这里添加代码,后面的代码不允许做任何改动或删除,否则不得分

     /*****************************************************/

     printf("%s", s);

     return 0;

}

运行时,从键盘输入一个字符串(不超过50个字符),将其逆序存放,然后输出。如:若输入ab  cd,则输出应为:dc  ba

 

Input

输入一个字符串

Output

输出逆序存放后的字符串

Sample Input

abcd123

Sample Output

321dcba 
 
 

Description

键盘输入一个字符串(可以有空格)存入数组,然后统计数字、字母和空格的出现个数

本题必须用数组求解

注意:在OJ上,实际上数据是从文件中读的,文件中字符串后面并没有换行符。如果getchar()读取字符时遇到无数据可读的情况,将返回EOF(EOF即-1)

Input

字符串(不超过50字符)

Output

数字、字母、空格的个数,每个一行

Sample Input

I am a student.1w3,He said:"very good!",325 end.

Sample Output

5 29 6
 
 
 

Description

键盘输入三行字符,每行均以回车结束,每行都不超过20个字符(不含回车)。统计每行中大写字母、小写字母、空格以及数字的个数

提醒:本题目不要用getchar()一个一个地读字符

Input

输入三行字符

Output

输出每行中4种字符的个数

Sample Input

aAbMcSd 8Kde ,23JH skdf 0923 D,F

Sample Output

6,6,2,3 0,4,1,4 2,0,0,0 

 

Description

键盘输入一个不超过20字符的字符串,将最后m个字符移动到最前面,前面的字符后移

Input

输入一个字符串和一个整数

Output

输出移动后的字符串

Sample Input

abcdefg 3

Sample Output

efgabcd
 
 

Description

键盘输入一个不超过20字符的字符串,若含有空格(可能不止一处),将所有空格去掉,输出删除空格之后的串。

主函数框架如下,你只需提交所缺代码即可,前后两部分代码已在后台。

#include <stdio.h>

int main()
{
    char s[21];
    int i,j,k;
    gets(s);
    /*************************************/

      //在此编写代码并提交该部分代码

    /*************************************/

    puts(s);
    return 0;  
}

Input

输入一个字符串

Output

输出处理后的字符串

Sample Input

abc d 12 3

Sample Output

abcd123
 
 

Description

键盘输入4个字符串(都不超过20个字符),找出最大的字符串。所谓最大,是指按字典顺序排序最大,如:good morning比good afternoon大,因为m比a大,又如:abc比abC大,因为c比C大(ascii码大)

Input

输入四个字符串

Output

输出最大字符串的内容

Sample Input

abc welcome to yantai 12345 welcome to beijing

Sample Output

welcome to yantai
 

Description

 设有如下代码:

int main()

{

      /*****************************************************/

     //只允许在这里添加代码,后面的代码不允许做任何改动或删除,否则不得分

     /*****************************************************/

     printf("%s", s);

     return 0;

}

运行时,从键盘输入一个字符串(不超过50个字符),将其逆序存放,然后输出。如:若输入ab  cd,则输出应为:dc  ba

 

Input

输入一个字符串

Output

输出逆序存放后的字符串

Sample Input

abcd123

Sample Output

321dcba 
 

#include<string.h>

#include<stdio.h>
int main()
{
char s[50],b[50];
int i,n,j=0;
scanf("%[^\n]",s);
n=strlen(s);
for(i=n-1;i>=0;i--)
b[j++]=s[i];
b[j]='\0';
strcpy(s,b);
printf("%s",s);
return 0;
}

 

Description

键盘输入一个字符串(可以有空格)存入数组,然后统计数字、字母和空格的出现个数

本题必须用数组求解

注意:在OJ上,实际上数据是从文件中读的,文件中字符串后面并没有换行符。如果getchar()读取字符时遇到无数据可读的情况,将返回EOF(EOF即-1)

Input

字符串(不超过50字符)

Output

数字、字母、空格的个数,每个一行

Sample Input

I am a student.1w3,He said:"very good!",325 end.

Sample Output

5 29 6
 

#include<stdio.h>

int main()

{

char str[100];

int i=0;

int num=0,ch=0,blank=0,other=0;

 

gets(str);

while(str[i]!='\0')

{

if((str[i]>='A' && str[i]<='Z') || (str[i]>='a' && str[i]<='z'))

ch++;//字母

else if(str[i]>='0' && str[i]<='9')

num++;//数字

else if(str[i]==' ')

blank++;//空格

else

other++;

 

i++;

}

printf("数字%d个,字母%d个,空格%d个,其他%d个\n",num,ch,blank,other);

return 0;

}

 

Description

键盘输入三行字符,每行均以回车结束,每行都不超过20个字符(不含回车)。统计每行中大写字母、小写字母、空格以及数字的个数

提醒:本题目不要用getchar()一个一个地读字符

Input

输入三行字符

Output

输出每行中4种字符的个数

Sample Input

aAbMcSd 8Kde ,23JH skdf 0923 D,F

Sample Output

6,6,2,3 0,4,1,4 2,0,0,0 
 

#include<stdio.h>

#include<string.h>
int main()
{
char a[3][21];
int i;
int k;
int ch1=0,ch2=0,blank=0,num=0;
for(i=0;i<3;i++)
{
gets(a[i]);
}
for(i=0;i<3;i++)
{
ch1=0,ch2=0,blank=0,num=0;
for(k=0;a[i][k];k++)
{
if(a[i][k]>=65&&a[i][k]<=90)
{
ch1++;
}
if(a[i][k]>=97&&a[i][k]<=122)
{
ch2++;
}
if(a[i][k]==32)
{
blank++;
}
if(a[i][k]>='0'&&a[i][k]<='9')
{
num++;
}
}
printf("%d,%d,%d,%d\n",ch1,ch2,blank,num);
}
}

 

Description

键盘输入4个字符串(都不超过20个字符),找出最大的字符串。所谓最大,是指按字典顺序排序最大,如:good morning比good afternoon大,因为m比a大,又如:abc比abC大,因为c比C大(ascii码大)

Input

输入四个字符串

Output

输出最大字符串的内容

Sample Input

abc welcome to yantai 12345 welcome to beijing

Sample Output

welcome to yantai
 

#include <string.h>

#include <stdio.h>
#include <stdlib.h>
int main()
{
char str[21], max[21];
int i;
gets(max);
for(i=0; i<=3; i++)
{
gets(str);
if(strcmp(max,str)<0)
strcpy(max,str);
}
puts(max);
}

 

Description

键盘输入一个不超过20字符的字符串,若含有空格(可能不止一处),将所有空格去掉,输出删除空格之后的串。

主函数框架如下,你只需提交所缺代码即可,前后两部分代码已在后台。

#include <stdio.h>

int main()
{
    char s[21];
    int i,j,k;
    gets(s);
    /*************************************/

      //在此编写代码并提交该部分代码

    /*************************************/

    puts(s);
    return 0;  
}

Input

输入一个字符串

Output

输出处理后的字符串

Sample Input

abc d 12 3

Sample Output

abcd123
 

#include <stdio.h>

int main()
{
char s[21];
int i,j,k;
gets(s);
j=0;
for(i=0;s[i];i++)
{
if(s[i]!=32)
{
s[j]=s[i];
j++;
}
}
s[j]='\0';
puts(s);
return 0;
}

Description

键盘输入一个不超过20字符的字符串,将最后m个字符移动到最前面,前面的字符后移

Input

输入一个字符串和一个整数

Output

输出移动后的字符串

Sample Input

abcdefg 3

Sample Output

efgabcd
 

#include<stdio.h>

#include<string.h>
int main()
{
char a[30];
int i,n,j,k;
char temp;
gets(a);
k=strlen(a);
scanf("%d",&n);
for(i=0;i<n;i++)
{
temp=a[k-1];
for(j=k;j>=0;j--)
{
a[j+1]=a[j];
}
a[0]=temp;
}
for(j=0;j<k;j++)
{
printf("%c",a[j]);
}
}

转载于:https://www.cnblogs.com/deer-king/p/10777812.html

你可能感兴趣的文章