枚举 砝码称重

  • Post author:
  • Post category:其他


设有 1g,2g,3g,5g,10g,20g1g,2g,3g,5g,10g,20g 的砝码各若干枚(其总重小于等于 10001000),现在求问这些砝码能称出多少不同的重量。

输入格式

一行六个整数,分别代表 1g1g 砝码的个数,分别代表 2g2g 砝码的个数,分别代表 3g3g 砝码的个数,分别代表 5g5g 砝码的个数,分别代表 10g10g 砝码的个数,分别代表 20g20g 砝码的个数。

输出格式

输出一行,格式为

Total=

nn。

(nn 表示用这些砝码能称出的不同重量的个数,但不包括一个砝码也不用的情况)

Sample Input

1 1 0 0 0 0

Sample Output

Total=3
#include<bits/stdc++.h>
using namespace std;

int huochainum(int x)//函数 求数x需要的火柴数目 
{	int m=0;

}
int main()
{	
	int m[6]={1,2,3,5,10,20};//重量 数组 
	int total=0,i,j,k,a[6];//输入 各砝码数量 数组 
	for(i=0;i<=5;i++)
	cin>>a[i];
	int b[1001];
	for(i=0;i<=1000;i++)
	{
		if(i==0)b[i]=1;
		else  b[i]=0;
	} 
	for(i=0;i<6;i++)//每个重量级砝码的种类依次遍历 
	{
		for(j=0;j<a[i];j++)//每个重量砝码的数量依次遍历 
		{
			for(k=1000;k>=m[i];k--)
				 if(b[k-m[i]]&&!b[k])
			 	{
			 		b[k]=1;
			 		total++;
			 	}
		}
	}	
	cout<<"Total="<<total<<endl;	
	return 0;
}

直接6个for:

#include<bits/stdc++.h>
using namespace std;
int main()
{	
	int a,b,c,d,e,f,i,j,k,l,m,n,weight,w[1000]={0},total=0;
	cin>>a>>b>>c>>d>>e>>f;
	for(i=0;i<=a;i++) 
		for(j=0;j<=b;j++)
			for(k=0;k<=c;k++)
				for(l=0;l<=d;l++)
					for(m=0;m<=e;m++)
						for(n=0;n<=f;n++)
						{
							weight=1*i+2*j+3*k+5*l+10*m+20*n;//所有可能的质量 存储在w数组中 
							if(weight)
								w[weight]++;
						}
	for(weight=0;weight<1000;weight++)
		if(w[weight])
			total++;				
	cout<<"Total="<<total<<endl;	
	return 0;
}



版权声明:本文为qq_61176213原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。