第N大周博客 12.17~12.30

本周学习了贪心,我用贪心做了一道特别简单的题:

题目:选球员,两队的教练分别选技巧值不同的球员(正常的教练都会从高的开始选),描述完毕。

好吧,接下来回到正题,程序如下:

 

  • #include<bits/stdc++.h>
    using namespace std;
    bool mmp(int c){
    	if(c%2==1)
    	return 1;
    	else
    	return 0;
    }
    int main()
    {
    	long long a,b[100000],e,f;
    	cin>>a;
    	for(int i=1;i<=a;i++)
    	{
    		cin>>b[i];
    	}
    	sort(b+1,b+a+1);
    	for(int j=1;j<=a;j++)
    	{
    		if(mmp(j))
    		{
    			e+=b[j];
    		}
    		else
    		{
    			f+=b[j];
    		}
    	}
        if(e-f>=0)
        {
        	cout<<e-f<<endl;
        }
        else
        if(e-f<0)
        {
        	cout<<f-e<<endl;
        }
    	return 0;
    }

 

分析:首先定义一个函数,函数的内容是用来将两队的选择分开,即一个教练选完是另一个教练选择,然后输入每个球员的技巧值,将技巧值从大到小排序,e为A队的选择的队员技巧值总值,f为B队的选择的球员技巧值总值,由于可能有队员技巧值相同,所以每一队的技巧之总值的大小是不一定的(简单地说,可能是A大,也可能是B队大)理解如下:

  • #include<bits/stdc++.h>
    using namespace std;
    bool mmp(int c){
    	if(c%2==1)//隔开两个教练的选择,即排序后,所有编号为奇数的队员们都属于A队教练,所有编号为偶数的都为B队队员; 
    	return 1; 
    	else
    	return 0;
    }
    int main()
    {
    	long long a,b[100000],e,f;
    	cin>>a;
    	for(int i=1;i<=a;i++)
    	{
    		cin>>b[i];//输入每个队员的技巧值; 
    	}
    	sort(b+1,b+a+1);//将待选队员们的技巧值从大到小排序,方便教练选择(O(∩_∩)O~) 
    	for(int j=1;j<=a;j++)//这个循环为开始分配每一名队员; 
    	{
    		if(mmp(j))//如果编号为奇数,那么这个队员就属于A队教练了; 
    		{
    			e+=b[j];//A队总技巧值加上这名队员的技巧值; 
    		}
    		else//如果编号不是奇数,即为偶数,那么这个队员就属于B队; 
    		{
    			f+=b[j];//B队总技巧值加上这名队员的技巧值; 
    		}
    	}
        if(e-f>=0) 
        {
        	cout<<e-f<<endl;//如果A队的总技巧值大于B队的总技巧值,那么他们的差即为A队总技巧值减去B队总技巧值; 
        }
        else//也有可能B队总技巧值大于A队的总技巧值,那么差即为B队总技巧值减去A队总技巧值; 
        if(e-f<0)
        {
        	cout<<f-e<<endl;
        }
    	return 0;
    }

还有一道更不需要用脑子的题目,但是这些题目都是属于数组的标签里的。。

题目如下:

输入一串数,统计这串数里每种数字的个数,代码如下:

  • #include<bits/stdc++.h>
    using namespace std;
    int main()
    {
    	long int a,b[1000000],c=1;//此处的C代表某一种数的个数,将C开始赋值为1,是为了后面统计时,将最开始的那一个遗漏的也加上; 
    	cin>>a;//输入数字的总个数; 
    	for(int i=1;i<=a;i++)
    	{
    		cin>>b[i];//输入每个数字; 
    	}
    	sort(b+1,b+a+1);//将这一大坨数字从小到大排序,排序之后,相同的数会排在一起; 
    	for(int j=1;j<=a;j++)
    	{
    		if(b[j]==b[j+1])//如果这个与他后面的那个数相等; 
    		{
    			c++;//那么这个数的种类加1; 
    		}
    		else//如果这个数与他后面的数已经不相同了,说明该数已经是最后一个了,即为两种数字的分界点; 
    		{
    			cout<<b[j]<<' '<<c<<endl;//由于该数字已经到达了分界点,可以直接输出该数字和他的个数,重新开始统计下一个数字; 
    			c=1;//统计之前,将C复原; 
    		}
    	}
    	return 0;
    }
    (又臭又长?)

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值