深信服2019笔试编程题--选题使总分值100并输出选择数量和编号

输入:第一行,输入试题数量n(n<=10);

           按顺序输入各个试题的分值v;

输出:第一行输出选择的个数;

          按从小到大的顺序输出选择试题的序号。

思路:这道题是没有规律可循的,由于数量n不大于10,每个题都存在0/1两种状态,最多也就是pow(1,10)=1024种情况,所以采取暴力解决。

#include <IOSTREAM>
#include <VECTOR>
#include <MATH.H>
#define max(a,b) a>b?a:b
using namespace std;

int main()
{
	int sum=0,n,f[11]={0};
	cin>>n;
	vector<int> res;
	res.push_back(0);//不使用res[0]
	for (int i=1;i<=n;i++)
	{
		int temp;
		cin>>temp;
		res.push_back(temp);
	}

	for( i=1;i<pow(2,n);i++)	
	{
		int t=i;
		for (int j=1;j<=n;j++)
		{
			f[j]=t&1;//按位与,判断是否选择当前题型
			t=t>>1;
		}
		sum=f[1]*res[1]+f[2]*res[2]+f[3]*res[3]+f[4]*res[4]+f[5]*res[5]+f[6]*res[6]+f[7]*res[7]+f[8]*res[8]+f[9]*res[9]+f[10]*res[10];	
		if(sum==100)
		{
		   cout<<"yes"<<endl;
		   for (i=1;i<=10;i++)
			{
			   if (f[i]==1)
			   {
			     	cout<<i<<' ';//按顺序输出序号
			   }
			}
		   return 0;
		}
	}	
	cout<<"no"<<endl;							
	return 0;
}

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值