1. 程式人生 > >2013藍橋杯全國軟體大賽C++模擬試題-硬幣方案-解答

2013藍橋杯全國軟體大賽C++模擬試題-硬幣方案-解答

題目

標題:硬幣方案

有50枚硬幣,可能包括4種類型:1元,5角,1角,5分。
已知總價值為20元。求各種硬幣的數量。
比如:2,34,6,8 就是一種答案。
而 2,33,15,0 是另一個可能的答案,顯然答案不唯一。

你的任務是確定類似這樣的不同的方案一共有多少個(包括已經給出的2個)?

/*
標題:硬幣方案

有50枚硬幣,可能包括4種類型:1元,5角,1角,5分。
已知總價值為20元。求各種硬幣的數量。
比如:2,34,6,8 就是一種答案。
而 2,33,15,0 是另一個可能的答案,顯然答案不唯一。

你的任務是確定類似這樣的不同的方案一共有多少個(包括已經給出的2個)?

作者:郭豔燕
時間:20130408
*/

#include <iostream>
using namespace std;

int main()
{
  //金錢型別不統一,在進行定義時要統計計量單位,都用分來表示
  int yuan1=100; 
  int jiao5=50;
  int jiao1=10;
  int fen5=5;

  int n=0; //n用來記錄方案個數

  //分別來記錄1元硬幣個數、5角硬幣個數、1角硬幣個數、5分硬幣個數
  int yuan1_count=0,jiao5_count=0,jiao1_count=0,fen5_count=0; 

  //利用列舉法,列出所有可能選項再根據條件進行篩選
  //條件1,硬幣個數和要等於50
  //條件2,所有硬幣價值總和等於20元=2000分
  for(yuan1_count=0;yuan1_count<=50;yuan1_count++)   //列舉1元硬幣個數
	  for(jiao5_count=0;jiao5_count<=50;jiao5_count++) //列舉5角硬幣個數
		  for(jiao1_count=0;jiao1_count<=50;jiao1_count++) //列舉1角硬幣個數
			  for(fen5_count=0;fen5_count<=50;fen5_count++) //列舉5分硬幣個數
				  if((yuan1_count+jiao5_count+jiao1_count+fen5_count==50)&&(yuan1*yuan1_count+jiao5*jiao5_count+jiao1*jiao1_count+fen5*fen5_count==2000))
                     n++;  //滿足條件方案數增1

				  
  cout<<"有50枚硬幣,可能包括4種類型:1元,5角,1角,5分。已知總價值為20元。"<<endl;
  cout<<"滿足上述條件的不同的組合方案個數為:"<<n<<endl;

 return 0;
}