1. 程式人生 > >1006 換個格式輸出整數——C++實現

1006 換個格式輸出整數——C++實現

題目

1006 換個格式輸出整數 (15 point(s))

讓我們用字母 B 來表示“百”、字母 S 表示“十”,用 12...n 來表示不為零的個位數字 n(<10),換個格式來輸出任一個不超過 3 位的正整數。例如 234 應該被輸出為 BBSSS1234,因為它有 2 個“百”、3 個“十”、以及個位的 4。

輸入格式:

每個測試輸入包含 1 個測試用例,給出正整數 n(<1000)。

輸出格式:

每個測試用例的輸出佔一行,用規定的格式輸出 n。

輸入樣例 1:

234

輸出樣例 1:

BBSSS1234

輸入樣例 2:

23

輸出樣例 2:

SS123

演算法

這個題目難度倒是不大,無論通過什麼方法都能解決。

方法1是從C的角度出發,建立對應的陣列。

方法2是從string類的角度出發,判斷輸入是幾位數字,這裡要先將數字轉化為字串,用到了一個很好用的to_string(),這個函式要包含在<string>中。

方法3是柳婼大神的思路,顯然使用while將各位數字取出來,再輸出也是一個好方法。

思路

方法1

//pat1006V1
 #include <stdio.h>
 int main(){
 	int value,i,bai,shi,ge;	//value save the user's input
 	char BaiArray[][10]={"B","BB","BBB","BBBB","BBBBB","BBBBBB","BBBBBBB","BBBBBBBB","BBBBBBBBB"};
 	char ShiArray[][10]={"S","SS","SSS","SSSS","SSSSS","SSSSSS","SSSSSSS","SSSSSSSS","SSSSSSSSS"};
 	char GeArray[][10]={"1","12","123","1234","12345","123456","1234567","12345678","123456789"};
 	scanf("%d",&value);
 	
 	ge=value%10;
 	shi=value/10%10;
 	bai=value/100;
 //	printf("%d %d %d\n",bai,shi,ge);
 	for(i=0;i<9;i++)
 		if(bai==i+1)
 			printf("%s",BaiArray[i]);
	for(i=0;i<9;i++)
 		if(shi==i+1)
 			printf("%s",ShiArray[i]);
	 for(i=0;i<9;i++)
 		if(ge==i+1)
 			printf("%s",GeArray[i]);
	 return 0;
 }

方法2

#include <iostream>
#include <string>
using namespace std;
int main(){
	int n;	cin>>n;
	char c[2]={'S','B'};
	string str=to_string(n);
	if(str.length() ==1){
		for(int i=1;i<=n;i++)
			cout<<i;
	}
	if(str.length() ==2){
		for(int i=0;i<n/10;i++)
			printf("%c",c[0]);
		for(int i=1;i<=n%10;i++)
			cout<<i;
	}
	if(str.length() ==3){
		for(int i=0;i<n/100;i++)
			printf("%c",c[1]);
		for(int i=0;i<n%100/10;i++)
			printf("%c",c[0]);
		for(int i=1;i<=n%100%10;i++)
			cout<<i;
	}
	return 0;
} 

方法3

#include <iostream>
#include <string>
using namespace std;
int main(){
	int n,i=0;	cin>>n;
	int b[3]={0};
	while(n){
		b[i++]=n%10;	//依次取出最後一位數字
		n/=10; 
	}
	for(int j=0;j<b[2];j++)	cout<<"B";
	for(int j=0;j<b[1];j++)	cout<<"S";
	for(int j=0;j<b[0];j++)	cout<<j+1;
	return 0;
}