数组综合应用(下标计数)C++

第1题     铅笔     时限:1s 空间:256m

桌面有n个盒子,第i个盒子有a[i]支铅笔。

你想要得到尽量多的铅笔,但是如果某两个盒子有相同数量的铅笔,那么你是不能同时拥有这两个盒子的。

问你最多可以得到多少支铅笔。

输入格式

第一行,一个整数n。 1<=n<=50。

第二行,n个整数,第i个整数是a[i]。 1<=a[i]<=10。

输出格式

一个整数。

输入/输出例子1

输入:

4

5 2 5 3

输出:

10

输入/输出例子2

输入:

3

5 5 5

输出:

5

#include<bits/stdc++.h>
using namespace std;
long long n,t,a[1000005],s; 
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
    	cin>>t;
    	a[t]=1;
	}
    for(int i=1;i<=50;i++){
    	if(a[i]==1)s+=i;
	}
	cout<<s;
    return 0;
}

第2题     号码牌     时限:5s 空间:256m

张老师班上有 位同学参加秋季运动会,老师为同学们定制了比赛专属号码牌,编号为 1N

 

生产号码牌的商家发货后,张老师发现号码牌少了 个号码,但是统计后发现,确实有 个号码牌,且所有号码牌的编号都在 [1,N]的范围内,但是有一个号码被错误的印刷成了另一个号码。

 

请编程帮老师找出这些号码牌中,缺失的号码和被错误印刷了 2次的号码。

输入格式

 行读入整数 N,代表号码牌的数量;

 

 2行读入 个号码,用空格隔开。

输出格式

输出 个整数,用空格隔开,第 个整数,代表缺失的号码,第 个整数代表被印刷了 次的号码。

输入/输出例子1

输入:

6

2 1 5 2 4 6

输出:

3 2

样例解释

数据范围

 

对于 100%的测试数据,满足 5N100000

 

所有测试点均满足读入的 个号码牌的数值均在 [1,N] 的范围内,且缺失的号码牌及被错误印刷 2次的号码牌均是唯一的。

#include<bits/stdc++.h>
using namespace std;
long long n,a[100000+5],b[100000+5],x,x1;
int main(){
    scanf("%lld",&n);
    for(int i=1;i<=n;i++){
    	scanf("%lld",&a[i]);
    	b[a[i]]++;
	}
	sort(a+1,a+n+1);
	for(int i=1;i<=n;i++){
		if(b[i]==0)x=i;
		if(b[i]==2)x1=i;
	}
	cout<<x<<" "<<x1;
    return 0;
}

第3题     侦察     时限:1s 空间:256m

小红通过简单的计算就求出了密码打开了沙盘,于是双方使用沙盘进行了攻城模拟。现在红有n个侦察兵,要从两支部队选派2个侦察兵去侦察小蓝部队驻守的城市。为了使得侦察兵能更好配合完成工作,小认为这2个侦察兵所在部队编号必须相差m
 现在已知n个侦察兵部队编号,请问小红有多少不同的选择方案(同一部队的不同士兵视为同一方案)

输入格式

1行,2个整数nm2<=n<=1000001<=m<=50)。

2行,n个整数,第i个整数表示第i个侦察兵部队编号1<=部队编号<=1000)。

输出格式

一个整数,表示不同的方案数。

输入/输出例子1

输入:

5  6

1  7  2  8  12

输出:

2

输入/输出例子2

输入:

6  8

1  1  9  9  2  8

输出:

1

样例解释

样例1解释:第1个侦察兵可以跟第2个侦察兵搭档,第3个侦察兵可以跟第4个侦察兵搭档,所以有2种不同选择方案。

#include<bits/stdc++.h>
using namespace std;
int main(){
    int n,k;
    cin>>n>>k;
    int a[n+1];
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    sort(a+1,a+n+1);
    int len=unique(a+1,a+n+1)-a;
    int count=0;
    for(int i=1;i<len;i++){
        for(int j=i+1;j<=len;j++){
            if(a[j]-a[i]==k){
                count++;
                break;
            }
        }
    }
    cout<<count;
    return 0;
}

第4题     战功     时限:1s 空间:256m

通过侦察,小红已经基本了解了对方的兵力部署情况,现在派遣特种部队进攻小蓝的模拟城市。通过几十分钟的攻守战模拟,小红的特种部队顺利攻下了小蓝的A城。在战斗中,每个模拟士兵都立下不小战功。现在小红想根据每个士兵的战功排名来论功行赏。
    例如有四名士兵,战功值分别为50、80、50、30分,则80分的士兵为第一名,50分的两名士兵均为第二名,30分的士兵为第四名。
请你编写一个程序,计算每个士兵在这种排名方式之下的名次。

输入格式

第一行为一个整数n,表示参战的士兵数,1<=n<=1000000,第二行为n个整数,表示每位士兵的战功值(战功值<=1000000)。

输出格式

一行,表示每位士兵的名次,一个空格隔开。

输入/输出例子1

输入:

4

50 80 50 30

输出:

2 1 2 4

#include<bits/stdc++.h>
using namespace std;
long long n,a[1000005],b[1000005],maxx=0,minn=1000005,xx=1,x;
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		b[a[i]]++;
		maxx=max(maxx,a[i]),minn=min(minn,a[i]);
	}
	for(int i=maxx;i>=minn;i--){
		if(b[i]>=1){
			x=b[i];
			b[i]=xx;
			xx+=x;
		}
	}
	for(int i=1;i<=n;i++){
		cout<<b[a[i]]<<" ";
	}
	return 0;
}

第5题     社团交集     时限:5s 空间:256m

HJ小学信息学社团每个同学都有且仅有一个数字编号(1~1000),现在帅气的吴老师准备举办n个学习项目,信息学社团的每个同学都参加项目且可以参加多个项目。问:同时参加所有项目的同学有哪些?请从小到大输出他们的编号。

输入格式

第一行有1个正整数n1<=n<=100)表示有n个学习项目。

接下来的n行每行第一个整数ki1<=ki<=1000)表示第i个项目的同学人数,后面有ki个正整数,表示项目中同学的编号(不超过1000)。

输出格式

输出同时参加所有项目的同学的编号,从小到大。

输入/输出例子1

输入:

3

5 6 2 8 3 9

4 1 2 3 6

4 6 8 2 1

输出:

2  6

#include<bits/stdc++.h>
using namespace std;
long long n,m,a[100005],b[100005];
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>m;
		for(int j=1;j<=m;j++){
			cin>>a[i];
			b[a[i]]++;
		}
	}
	for(int i=1;i<=1000;i++){
		if(b[i]==n)cout<<i<<" ";
	}
    return 0;
}

第6题     优秀的作品     时限:5s 空间:256m

博爱小学举办书法大赛,学校一共收到了 N 个同学的作品,并给作品编号 1∼N

 N幅作品被放到了学校的展厅展览,并请全校同学进行公开投票。投票结束,学校收到了 M张投票,每张投票投给了 1幅参赛的作品;学校预计评比出一等奖、二等奖、三等奖 各 1名;

由于可能存在多个优秀作品得票数相同的情况,因此最终实际获奖名额可能会比预计多,这种情况下,学校会增加相应奖项等级的获奖名额。

比如,如果有 3位同学得票数并列第 1,这种情况学校会颁发出 个一等奖。

请编程统计出一等奖、二等奖、三等奖获奖作品的编号。

输入格式

 1行读入 个整数 和 M,分别代表参赛作品的数量和投票的数量;

 2行读入 个整数,第 个整数 Ai 代表了第 i张投票投给了编号为 Ai 的作品。

输出格式

输出 3 行,每行输出若干整数,用空格隔开;

 1 行输出一等奖获奖作品的编号,第 行输出二等奖获奖作品的编号,第 3行输出三等奖获奖作品的编号;

如果某个奖项有多个作品获得,那么该奖项的获奖作品编号按照编号值从小到大的顺序输出。

输入/输出例子1

输入:

8 15

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

输出:

3 4

6 7 8

1 2 5

输入/输出例子2

输入:

10 16

6 5 7 2 2 1 1 7 4 2 2 7 7 2 4 4

输出:

2

7

4

样例解释

号作品和 号作品各获得 3票,并列第 1,评选为一等奖;

号作品、号作品、号作品各获得 票,并列第 ,评选为二等奖;

号作品、号作品、号作品各获得 票,并列第 ,评选为三等奖;

数据范围

对于 100%的数据,6≤N,M≤1000001≤Ai≤N

测试数据确保统计后一等奖、二等奖、三等奖至少各有 1 人。

#include<bits/stdc++.h>
using namespace std;
long long n,m,t,a[100005],maxx1,maxx2,maxx3; 
int main(){
	scanf("%lld%lld",&m,&n);
	for(int i=1;i<=n;i++){
		scanf("%lld",&t);
		a[t]++;
	}	
	for(int i=1;i<=m;i++){
		maxx1=max(maxx1,a[i]);
	}
	for(int i=1;i<=m;i++){
		if(a[i]!=maxx1){
			maxx2=max(maxx2,a[i]);
		}
	}
	for(int i=1;i<=m;i++){
		if(a[i]!=maxx1&&a[i]!=maxx2){
			maxx3=max(maxx3,a[i]);
		}
	}
	for(int i=1;i<=m;i++){
		if(a[i]==maxx1){
			cout<<i<<" ";
		}
	}
	cout<<'\n';
	for(int i=1;i<=m;i++){
		if(a[i]==maxx2){
			cout<<i<<" ";
		}
	}
	cout<<'\n';
	for(int i=1;i<=m;i++){
		if(a[i]==maxx3){
			cout<<i<<" ";
		}
	}
    return 0;
}

第7题     餐饮服务质量打分     时限:1s 空间:256m

假设有40个学生被邀请来给餐厅的饮食和服务质量打分,分数划分为1~1010个等级(1表示最低分,10表示最高分),编程统计并如下格式输出餐饮服务质量调查结果。

Grade  Count   Histogram

1       5          *****

2       10        **********

3       7          *******

···

输入格式

40个数。

输出格式

11行。GradeCountHistogram和各个数据都占一个制表符(8位)。

输出格式:printf("%-8d%-8d",i,a[i]);

输入/输出例子1

输入:

5 7 9 8 7 6 8 9 10 7

9 5 8 10 9 6 8 5 9 7

6 10 5 9 8 9 7 7 9 8

8 6 9 9 9 8 8 7 9 5

输出:

Grade      Count      Histogram

1       0       

2       0       

3       0       

4       0       

5       5       *****

6       4       ****

7       7       *******

8       9       *********

9       12        ************

10        3       ***

#include<bits/stdc++.h>
using namespace std;
int x,a[15];
int main(){
	for(int i=0;i<40;i++){
		cin>>x;
		a[x]++;
	}
	printf("Grade      count      Histogram\n");
	for(int i=1;i<=10;i++){
		printf("%-8d%-8d",i,a[i]);
		for(int j=0;j<a[i];j++)cout<<"*";
		cout<<'\n';
	}
	return 0;
}

第8题     集卡册     时限:1s 空间:256m

小胡喜欢收集奥特曼卡片,对每个奥特曼的技能,身高,体重都如数家珍。

为了能把这些卡片带给小伙伴们炫耀,他还特地买了一本集卡册。集卡册一共能装 16 张卡片,每次出门他都会装满这本集卡册,但是有时粗心的小胡会放入两张相同的卡片。

如下所示:

 

image.png

上面每个大写字母代表一种卡片,其中第一张和第五张相同。

输入格式

输入 16个连续的大写字母,代表放入的 16 张卡片的种类。

输出格式

如果 16 张卡片各不相同,输出 different

如果有 2张卡片的种类一样,以由小到大的顺序输出 2 张相同卡片的编号, 2 个位置序号之间以空格隔开。

输入/输出例子1

输入:

BCDEGHJKLBAUIOPQ

输出:

1 10

输入/输出例子2

输入:

ABCDEFGHIJKLMNOP

输出:

different

样例解释

【样例 1 解释】

十六张卡片中第一张和第十张都是 B,所以答案是 1 10。

【数据说明】

相同的卡片最多只会有一种,且最多只有2 

#include<bits/stdc++.h>
using namespace std;
string s;
long long s1=0,a[3];
bool f=0;
int main(){
	cin>>s;
	for(long long i=0;i<s.size();i++){
		for(long long j=i+1;j<s.size();j++){
			if(s[i]!=s[j]){
				f=1;
			}
			else {
				cout<<i+1<<" "<<j+1;
				return 0;
			}
		} 
	}
	if(f)printf("different");
    return 0;
}

第9题     三连击     时限:1s 空间:256m

 1,2,…,9共 9个数分成三组,分别组成三个三位数,且使这三个三位数的比例是 A:B:C,试求出所有满足条件的三个三位数,若无解,输出 No!!!

输入格式

三个数,A,B,C A<B<C

输出格式

若干行,每行 3个数字。按照每行第一个数字升序排列。

输入/输出例子1

输入:

1 2 3

输出:

192 384 576

219 438 657

273 546 819

327 654 981

输入/输出例子2

输入:

1 4 6

输出:

No!!!

#include<bits/stdc++.h>
using namespace std;
long long a[1000005],s1,s2,s3,l,x1,x2,x3,s;
int main (){
    cin>>x1>>x2>>x3;
    for(int i=1;i<=1000/x3;i++){
        s1=i*x1,s2=i*x2,s3=i*x3; 
        if(s2>999||s3>999){
        	break;
		}
        for(int j=1;j<=3;j++){
            a[s1%10]++;
            s1/=10;
        }
        for(int j=1;j<=3;j++){
            a[s2%10]++;
            s2/=10;
        }
        for(int j=1;j<=3;j++){
            a[s3%10]++;
            s3/=10;
        }
        for(int j=1;j<=9;j++){
        	if(a[j]!=1){
				l=1;
				break;
			}
		}
        for(int j=1;j<=9;j++){
        	a[j]=0;
		}
        if(!l){
			cout<<i*x1<<' '<<i*x2<<' '<<i*x3<<'\n';
			s++;
		}
        else l=0;
    }
    if(!s)cout<<"No!!!";
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值