每日一练

 目录

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值