目录
1124:题目描述
已知数组a中有m个按升序序排列的元素,数组b中有n个降序排列的元素,编程将a与b中的所有元素按降序存入数组c中。
1125:题目描述
编写程序,输入一个正整数n(1<=n<=10)和n阶方阵a中的元素,如果a是上三角矩阵,输出“YES”,否则,输出“NO”。
1.1
1123:
题目描述
北京校友会每年举办两次,所有校友都有校友编号,每次到会的校友都在签到簿上写下自己的编号和姓名,在校友会成立5周年的聚会上将颁发“最佳校友奖”,该奖项颁发给到会次数最多的校友。现在请你编写程序,找出这个奖项的得主。若有多个校友并列第一,则均可获奖。
输入
输入若干个整数,表示签到簿上的校友编号,所有编号均为0~99的整数,以一个负数作为输入结束的标志。
输出
输出出现次数最多的编号。若获奖选手有多个,则按从小到大的顺序输出选手编号,用空格隔开。
1.2
答案:
#include<stdio.h>
void fx(int a[],int n);
int main()
{
int n,i,a[99999],x[99999],max=-1;
while(scanf("%d",&a[i++]),a[i-1]!=-1);
n=i-1;
fx(a,n);
for(i=0; i<n-1; i++)//对应a[i]创建新数组x[i],x[i]统计数字重复次数
if(a[i]==a[i+1])
x[i+1]=x[i]+1;/*例如 a[0]=5,a[1]=5,a[2]=5,a[3]=7,a[4]=8,a[5]=8
x[0]=0,x[1]=1,x[2]=2,x[3]=0,x[4]=0,x[5]=2 */
for(i=0; i<n; i++)
if(max<x[i])
max=x[i];//找到最大重复次数
for(i=0; i<n; i++)
if(x[i]==max)
printf("%d ",a[i]);//输出最大重复次数的下标,如果有多个,按顺序输出(左向右循环 ,即由小到大)
return 0;
}
void fx(int a[],int n)
{
int c,b,t;
for(c=0; c<n-1; c++)
for(b=0; b<n-1-c; b++)
if(a[b]>a[b+1])
{
t=a[b];
a[b]=a[b+1];
a[b+1]=t;
}
}
2.1
1124:
题目描述
已知数组a中有m个按升序序排列的元素,数组b中有n个降序排列的元素,编程将a与b中的所有元素按降序存入数组c中。
输入
输入有两行,第一行首先是一个正整数m,然后是m个整数;第二行首先是一个正整数n,然后是n个整数,m, n均小于等于1000000。
输出
输出合并后的m+n个整数,数据之间用空格隔开。输出占一行。
2.2
答案:
方法一:
#include<stdio.h>
void fx(int b[],int n);
int main()
{
int n1,n2,a[99999],b[99999],i,j;
scanf("%d",&n1);
for(i=0; i<n1; i++)
scanf("%d",&a[i]);
scanf("%d",&n2);
j=n2;
for(i=0; i<n2; i++)
scanf("%d",&b[i]);//分别读取两个数组
for(i=0; i<n1; i++,j++)
b[j]=a[i];
fx(b,n1+n2);
for(i=0; i<n1+n2; i++)
printf("%d ",b[i]);
return 0;
}
void fx(int b[],int n)
{
int x,y,t;
for(x=0; x<n-1; x++)
for(y=0; y<n-1-x; y++)
if(b[y]<b[y+1])
{
t=b[y];
b[y]=b[y+1];
b[y+1]=t;
}
}
方法二:
#include<stdio.h>
void fx(int b[],int n);
int main()
{
int n1,n2,a[99999],b[99999],c[99999],i,j;
scanf("%d",&n1);
for(i=0; i<n1; i++)
scanf("%d",&a[i]);
scanf("%d",&n2);
for(i=0; i<n2; i++)
scanf("%d",&b[i]);//分别读取两个数组
for(i=0,j=0; i<n1+n2; i++)
{
c[i]=a[i];
if(i>=n1)
c[i]=b[j++];
}
fx(c,n1+n2);
for(i=0; i<n1+n2; i++)
printf("%d ",c[i]);
return 0;
}
void fx(int c[],int n)
{
int x,y,t;
for(x=0; x<n-1; x++)
for(y=0; y<n-1-x; y++)
if(c[y]<c[y+1])
{
t=c[y];
c[y]=c[y+1];
c[y+1]=t;
}
}
3.1
1125:
题目描述
编写程序,输入一个正整数n(1<=n<=10)和n阶方阵a中的元素,如果a是上三角矩阵,输出“YES”,否则,输出“NO”。
上三角矩阵即主对角线以下(不包括主对角线)的元素都为0的矩阵,主对角线为从矩阵的左上角至右下角的连线。
要求定义函数IsUpperTriMatrix()判断矩阵a是否是上三角矩阵,如果是返回1,否则返回0。函数原型如下:
int IsUpperTriMatrix(int a[][N], int n);
输入
输入一个正整数n(1<=n<=10)和n阶方阵a中的元素,均为整数。
输出
如果a是上三角矩阵,输出“YES”,否则,输出“NO”
3.2
答案:
调用函数版
#include<stdio.h>
int main()
{
int m,i,j,a[100][100];
scanf("%d",&m);
for(i=0; i<m; i++)
for(j=0; j<m; j++)
scanf("%d",&a[i][j]);
if(IsUpperTriMatrix(a,m)==1)
printf("YES");
else
printf("NO");
return 0;
}
int IsUpperTriMatrix(int a[][100], int n)
{
int i,j,b=0;
for(i=0; i<n; i++)
for(j=0; j<n; j++)
if(i>j && a[i][j]!=0)
b++;
if(b!=0)
return 0;
else
return 1;
}
非调用函数版(oj正确)
#include<stdio.h>
int main()
{
int m,i,j,c=0;
scanf("%d",&m);
int a[m][m];
for(i=0; i<m; i++)
for(j=0; j<m; j++)
scanf("%d",&a[i][j]);
for(i=0; i<m; i++)
for(j=0; j<m; j++)
if(i>j && a[i][j]!=0)
c++;
if(c==0)
printf("YES");
else
printf("NO");
return 0;
}
ps:
第二题方法一思路:
将数组a插入数组b后面
,
a[i]
从0开始 到
a[n1-1]
结束,插入到
b[n2]
—
b[n2+n1-1]
方法二思路:
建立第三个数组
,前两个数组合并到第三个。(oj两种方法都是运行错误,原因未知)