1. 程式人生 > >LFYZ-OJ ID: 1019 位數問題

LFYZ-OJ ID: 1019 位數問題

位數問題

問題描述

在所有的N位數中,有多少個數中有偶數個數字3?由於結果可能很大,你只需要輸出這個答案對12345取餘的值。

INPUT

輸入一個數N(1<=N<=1000),輸入以0結束。

OUTPUT

對於每一個N輸出有多少個數中有偶數個數字3。

Sample Input

2
0

Sample Output

73

如果n位數中有偶數個3,新增一個數位為3,則n+1位數中有奇數個3
如果n位數中有偶數個3,新增一個數位為非3,則n+1位數中有偶數個3
如果n位數中有奇數個3,新增一個數位為3,則n+1位數中有偶數個3
如果n位數中有奇數個3,新增一個數位為非3,則n+1位數中有奇數個3


#include<stdio.h>

int main(){
	int n,i;
	scanf("%d",&n);
	int a[n+1],b[n+1];//a[i]表示i位數字中由偶數個3,b[i]表示i位數字中由奇數個3, 
	a[1]=9;b[1]=1;
	for(i=2;i<=n;i++){
		a[2]=a[1]*9+b[1];
		b[2]=b[1]*9+a[1];
		if(i<n-1){//滾動陣列 
		a[1]=a[2];
		b[1]=b[2]; 			
		}
	}
	if(n==1){
	  printf("%d",a[1]);	
	}
	else printf("%d",a[2]-a[1]); //減去開頭是0的 
} 
方二:
#include<stdio.h>

int main(){
	int n,i;
	scanf("%d",&n);
	int a[n+1],b[n+1];//a[i]表示i位數字中由偶數個3,b[i]表示i位數字中由奇數個3, 
	a[0]=0;
	a[1]=9;b[1]=1;
	for(i=2;i<=n;i++){//滾動陣列 
		a[i%2]=a[(i-1)%2]*9+b[(i-1)%2];
		b[i%2]=b[(i-1)%2]*9+a[(i-1)%2];
	}
    printf("%d",a[n%2]-a[(n-1)%2]); //減去開頭是0的 
}