42 數列2

問題描述 :

思維的嚴密性是相當重要的,尤其是在程序設計中,一個小小的錯誤,就可能導致無法想象的後果。明明的爸爸是一名富有經驗的程序設計專家,深知思維嚴密的重要性,於是在明明很小的時候,就通過遊戲的方式,訓練明明的思維嚴密性。今天,明明的爸爸和明明做了一個數列的遊戲。這個遊戲很簡單,就是有一數列,現在需要在這數列中選出一個或者若干個數(可以不連續),要求這些數的和能被11整除。明明的爸爸想鍛鍊明明思維的嚴密性,因此要求明明儘可能多的找出符合條件的數列來,最好一個也不要漏掉。 例如一數列爲“11 22 33”,其中11可以被11整除,22可以被11整除,33可以被11整除,11+22=33能被11整除,22+33=55能被11整除,11+33=44能被11整除,11+22+33=66能被11整除。所以以上一數列能被11整除的情況一共有7種。 明明對於這個遊戲很感興趣,高興地玩了起來。由於粗心,明明總是無法一次就把所有的情況都找出來,這使得他爸爸不是很滿意。於是明明爸爸決定先降低遊戲的難度,事先告訴明明某一數列總共有多少種符合條件的選擇數字的方法,然後再讓明明去選。明明的爸爸請你幫一個忙,他不想自己找出所有的情況,因此請你寫一個程序,用程序來找出一共有多少種符合選數的情況,並把結果告訴他。

明明爸爸的問題可以歸結爲:給你一個數列,從中選出1個或若干個數(可以不連續),要求這些數的和能被11整除,問這樣的選數方法一共有多少種。

輸入說明 :

你寫的程序要求從標準輸入設備中讀入測試數據作爲你所寫程序的輸入數據。標準輸入設備中有多組測試數據,每組測試數據有兩行,每組測試數據的第一行有一個整數n(1≤n≤15),表示數列中有多少個整數,每組測試數據的第二行有n個整數,整數的大小都大於等於0且小於等於100,整數之間用一個空格隔開。每組測試數據與其後一組測試數據之間沒有任何空行,第一組測試數據前面以及最後一組測試數據後面也都沒有任何空行。

輸出說明 :

對於每一組測試數據,你寫的程序要求計算出一組相應的運算結果,並將每組運算結果作爲你所寫程序的輸出數據依次寫入到標準輸出設備中。每組運算結果爲一個整數,即表示一共有多少種選數方法。每組運算結果單獨形成一行數據,其行首和行尾都沒有任何空格,每組運算結果與其後一組運算結果之間沒有任何空行,第一組運算結果前面以及最後一組運算結果後面也都沒有任何空行。 注:通常,顯示屏爲標準輸出設備。

輸入範例 :

1
11
3
11 22 33

輸出範例 :

1
7

c源碼:

#include<stdio.h>
int s;
void fun(int sum,int level,int dir,int a[],int n){
	
	if(level==n){
		if(sum!=0&&sum%11==0&&dir!=1){
			s++;
		}
		return ;
	}
	if(sum!=0&&sum%11==0&&dir!=1){
		s++;
	}
	fun(sum+a[level],level+1,-1,a,n);
	fun(sum,level+1,1,a,n);

}

int main(){
	int i,a[50],n;
	while(scanf("%d",&n)!=EOF){
		for(i=0;i<n;i++){
			scanf("%d",&a[i]);
		}
		s=0;
		fun(0,0,0,a,n);
		printf("%d\n",s);
	}
	return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章