B - 浪漫手機

最近,WisKey迷上了手機鈴聲,但是他對音律不是很懂,所以他想着能否用計算機來隨機生成鈴聲。當WisKey寫好程序後,發現生成出來的根本不是鈴聲,而是噪聲! 
之後WisKey查閱了一些樂譜發現,其實很多鈴聲是以某種規律變化的,這裏爲了簡化這個難題,他以連續3個音符來判斷下個音符。 
如有模式 
 
在給定第一行樂譜的情況下,按模式將產生如下樂譜圖形: 
 
我們用0表示白色格子,用1表示黑色格子。 
對於沒有連續3個格子的邊緣(即沒有左邊格子或右邊格子),我們直接用白色格子代替缺少的那一個格子。 

Input

第一行有一個整數T,代表有T組數據。 
每組數據有一個整數M,表示要輸出M行樂譜。接着有8行模式串,左邊是音符模式,右邊是下一個音符。最後一行是第一行樂譜。 

Output

輸出M行,表示M行樂譜。

Sample Input

1
16
111 1
110 1
101 1
100 1
011 1
010 0
001 1
000 0
0000000000000001000000000000000

Sample Output

0000000000000001000000000000000
0000000000000010100000000000000
0000000000000101010000000000000
0000000000001010101000000000000
0000000000010101010100000000000
0000000000101010101010000000000
0000000001010101010101000000000
0000000010101010101010100000000
0000000101010101010101010000000
0000001010101010101010101000000
0000010101010101010101010100000
0000101010101010101010101010000
0001010101010101010101010101000
0010101010101010101010101010100
0101010101010101010101010101010
1010101010101010101010101010101

 這道題其實不太難,但是格式很麻煩,這個需要很細心,其中有一個新接觸的知識點就是不懂得同學可以上網搜一下,我剛開始也不懂,後來知道怎麼寫了,這個知識點也會利用了

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
using namespace std;
int n,m,a[1000],k;
char cmp[1000],map[1000];
int main()
{
	int t;
	scanf("%d",&t);
	while(t--)
	{
		int x;
		scanf("%d",&x);
		for(int i=1;i<=8;i++)
		{
			scanf("%d%d",&n,&m);
			a[n]=m;
		}
		scanf("%s",cmp+1);
		cmp[0]='0';
		int len=strlen(cmp+1);
		puts(cmp+1);
		cmp[len+1]='0';
		cmp[len+2]='\0';
		for(int i=1;i<x;i++)
		{
			map[0]='0';
			for(int j=1;j<=len;j++)
			{
				k=(cmp[j-1]-'0')*100+(cmp[j]-'0')*10+(cmp[j+1]-'0');
				map[j]='0'+a[k];
			}
			map[len+1]='\0';
			puts(map+1);
			map[len+1]='0';
			map[len+2]='\0';
			strcpy(cmp,map);
		}
	}
	return 0;
}

 

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