24.12.17学习总结

题目描述

又来到了四年一度的主席竞选大赛,然后有n个候选人,编号分别是从1-n,现在需要你统计出票数最多的候选人是谁

输入

输入n

然后依次是n行

下面第几行就代表第几个候选人的票数

输出

输出最多票数的候选人编号以及票数

样例输入 
5
98765
12365
87954
1022356
985678
样例输出 
4
1022356
提示

票数可能会达到100位数字

n<=20

尚未达到要求的代码:

#include<stdio.h>
int main()
{
	int a,d[20],m=0;
	char k;
	int bi(int a[],int b,int t,int d[][200]);
	int b[100][200];
	scanf("%d",&a);
	getchar();
	for(int i=0,j;i<a;i++)
	{
		for(j=1;;j++)
		{
			scanf("%c",&k);
			if(k=='\n')break;
			b[i][j]=k-'0';
		}
		b[i][0]=j-1;
	}
	int t=b[0][0];
    for(int i=0,k=0;i<2;i++)
	{
		if(!i){for(int j=1;j<a;j++)
		{
			if(b[j][0]>t)t=b[j][0];
		}}
		if(i){for(int j=0;j<a;j++)
		{
			if(b[j][0]==t)d[k++]=j;
		}
			m=k;}
	}
	//for(int i=0;i<a;i++)printf("%d ",b[i][0]);
	int e=bi(d,0,m,b);
    printf("%d\n",e+1);
	for(int i=1;i<=b[e][0];i++)
	{
		printf("%d",b[e][i]);
	}
	return 0;
}
int bi(int a[],int b,int t,int d[][200])
{
	int c[20],m;
	for(int i=0,k=0;i<2;i++)
	{
		int t1=d[a[0]][b];
		if(!i){for(int j=1;j<t;j++)
		{
			if(d[a[j]][b]>t1)t1=d[a[j]][b];
		}}
		if(i){for(int j=0;j<t;j++)
		{
			if(t1==d[a[j]][b]){c[k++]=a[j];}
		}
			m=k;}
	}
	//printf("%d ",c[0]);
	if(m==1)return c[0];
	else bi(c,b+1,m,d);
}
题目描述

周老师无聊时乱写了 n 个区间,但处女座的他随后又想将 n 个区间整理合并,但他发现区间太多了,于是他想请你帮帮他

输入

每次测试输入多组数据(小于100组),对于每组输入数据:

第一行为  n ,代表 n 个区间

接下来 n 行,每行两个数 s , t 代表区间 [s,t]

0 < n < 15000

0 <= s <= t < 10000000 

输出

第一行输出一个数字 q ,代表合并后剩余的区间个数

随后 q 行 按从小到大的顺序输出区间

样例输入 
3
2 4
1 3
7 7
样例输出 
2
1 4
7 7

 写错的代码:

#include<stdio.h>
int a[10000005]={0},b[30000];
int main()
{
	int n,m=0,j=0,t=0,k=0;
	while(scanf("%d",&n)!=EOF){
		for(int i=0;i<n;i++)
		{
			int x,y;
			scanf("%d %d",&x,&y);
			if(y>m)m=y;
			a[x]++;
			a[y+1]--;
		}
		for(int i=1;i<m+2;i++)
		{
			a[i]+=a[i-1];
		}
		
		for(int i=0;i<m+2;i++)
		{
			if(a[i]!=0){
				if(!t){
					b[j++]=i;
					t=1;
				}
			}
			else {
				if(t){
					b[j++]=i-1;
					t=0;
					k++;
				}
			}
		}
		printf("%d\n",k);
		for(int i=0;i<k*2;i++)
		{
			printf("%d ",b[i]);
			if((i+1)%2==0)printf("\n");
		}
	}
	return 0;
}

声明:所用题皆来自刷题网,作者仅用来向组织反馈学习情况,无任何盈利行为。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值