2014年5月26日 星期一

重複排列, 袋中有 n 個不同的球,每次抽一顆,抽出後放回,抽m次,將每次抽出的球的編號記錄下來,總和是否為sum?共有幾種。


in
3 4 //3顆球 抽4次
1 3 5 //球上的數字
10 //抽出的球上面的數字的總和, 11 不可能
out
1 1 1 1 N //1+1+1+1=4, No
1 1 1 3 N
1 1 1 5 N
1 1 3 1 N
1 1 3 3 N
1 1 3 5 Y //1+1+3+5=10, Yes

a.in
3 4
1 3 5
10
a.out
1 1 1 1 N
1 1 1 3 N
1 1 1 5 N
1 1 3 1 N
1 1 3 3 N
1 1 3 5 Y
1 1 5 1 N
1 1 5 3 Y
1 1 5 5 N
1 3 1 1 N
1 3 1 3 N
1 3 1 5 Y
1 3 3 1 N
1 3 3 3 Y
1 3 3 5 N
1 3 5 1 Y
1 3 5 3 N
1 3 5 5 N
1 5 1 1 N
1 5 1 3 Y
1 5 1 5 N
1 5 3 1 Y
1 5 3 3 N
1 5 3 5 N
1 5 5 1 N
1 5 5 3 N
1 5 5 5 N
3 1 1 1 N
3 1 1 3 N
3 1 1 5 Y
3 1 3 1 N
3 1 3 3 Y
3 1 3 5 N
3 1 5 1 Y
3 1 5 3 N
3 1 5 5 N
3 3 1 1 N
3 3 1 3 Y
3 3 1 5 N
3 3 3 1 Y
3 3 3 3 N
3 3 3 5 N
3 3 5 1 N
3 3 5 3 N
3 3 5 5 N
3 5 1 1 Y
3 5 1 3 N
3 5 1 5 N
3 5 3 1 N
3 5 3 3 N
3 5 3 5 N
3 5 5 1 N
3 5 5 3 N
3 5 5 5 N
5 1 1 1 N
5 1 1 3 Y
5 1 1 5 N
5 1 3 1 Y
5 1 3 3 N
5 1 3 5 N
5 1 5 1 N
5 1 5 3 N
5 1 5 5 N
5 3 1 1 Y
5 3 1 3 N
5 3 1 5 N
5 3 3 1 N
5 3 3 3 N
5 3 3 5 N
5 3 5 1 N
5 3 5 3 N
5 3 5 5 N
5 5 1 1 N
5 5 1 3 N
5 5 1 5 N
5 5 3 1 N
5 5 3 3 N
5 5 3 5 N
5 5 5 1 N
5 5 5 3 N
5 5 5 5 N
16
code
#include <iostream>
#include <stack>
 
using namespace std;
 
int N,M; //#balls, #draw  
int main () { 
 int *A,target;  int amountofy=0;
 
 int  size=1;
 cin>>N>>M;
 A= new int [N];
 for(int i=0;i<N;i++)
 {
  cin>>A[i];
 }
 cin>>target;
 for(int i=0;i<M;i++)
 {
  size=size*N;
 }
 
 for(int i=0;i<size;i++ )
 {
  stack<int >S;int a=i;
  for(int j=0;j<M;j++){
   S.push (a%N);
   a=a/N;
  }
  int amount =0;
 
  for(int x=0;x<M;x++)
  {
   cout << A[S.top()] << ' ';
   amount+=A[S.top()];
   S.pop();
   
  }
  if (amount==target){ cout <<"Y";amountofy++;}
  else cout <<"N";
  cout<<endl;
 
 }
 cout<<amountofy;
}

沒有留言:

張貼留言