每日一练

  • Post author:
  • Post category:其他



目录


1.1


1123:题目描述


北京校友会每年举办两次,所有校友都有校友编号,每次到会的校友都在签到簿上写下自己的编号和姓名,在校友会成立5周年的聚会上将颁发“最佳校友奖”,该奖项颁发给到会次数最多的校友。现在请你编写程序,找出这个奖项的得主。若有多个校友并列第一,则均可获奖。


1.2


答案:


2.1


1124:题目描述


已知数组a中有m个按升序序排列的元素,数组b中有n个降序排列的元素,编程将a与b中的所有元素按降序存入数组c中。


2.2


答案:


3.1


1125:题目描述


编写程序,输入一个正整数n(1<=n<=10)和n阶方阵a中的元素,如果a是上三角矩阵,输出“YES”,否则,输出“NO”。


3.2


答案:


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两种方法都是运行错误,原因未知)



版权声明:本文为qq_61020744原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。