设有 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 版权协议,转载请附上原文出处链接和本声明。