解題報告:置換的玩笑

測試數據沒通過,不知道爲什麼,做了快一天了

#define  _CRT_SECURE_NO_WARNINGS 

#include<stdio.h>  
#include<cstring>  
#include<vector> 
#define MAXN 1002
using namespace std;
vector<int> index3;
vector<int> index2;
string str;
//打印輸出
bool getnum(string str){
	for (int i = 0; i < str.length(); i++)
	{
		bool find = false;
		for (int j = 0; j < index3.size(); j++)//雙數裏找有沒有這個數
		{
			if (i == index3[j]){ 
				printf("%c%c ", str[i], str[i + 1]); 
				i++; find = true; break; 
			} 
		}
		if (!find){//在雙數中沒有找到
			for (int j = 0; j < index2.size(); j++)//雙數裏找有沒有這個數
			{
				if (i == index2[j]){
					printf("%c ", str[i]);
					break;
				}
			}
		} 
	}
	return 0; }
bool dp(int num, string s){
	if (num == 0)return true;
	if (num <= 9){ 
		int len = s.length();
		int i = 0;
		bool flag = false;
		for (; i < len; i++){
			if (s[i] == (num % 10 + '0') ){//要找的數字小於9
				s[i] = ' ';
				index2.push_back(i);
				if (!dp(num - 1, s)){//沒找到
					flag = false;
					index2.pop_back();
					s[i] = num % 10 + '0'; 
				}
				else{//找到了
					flag = true;
					break;
				}
			}
		}
		 
		return flag;
	}
	else{
		int len = s.length();
		int i = 0;
		bool flag = false;
		for (; i < len; i++){
			if (s[i] == (num / 10 + '0') && s[i + 1] == (num % 10 + '0')){//要找的數字大於9
				s[i] = s[i + 1] = ' ';
				index3.push_back(i);
				if (!dp(num - 1, s)){//沒找到 
					flag = false;
					index3.pop_back();
					s[i] = num / 10 + '0';
					s[i + 1] = num % 10 + '0';
				}
				else{//找到了
					flag = true;
					break;
				}
			} 
		}
		return flag;
	}
}
int main(){
	  freopen("d://uva_in.txt", "r", stdin);
	 int n;
	 char s[105];
	 while (scanf("%s", s)>0){
		 int num = (strlen(s) - 9) / 2 + 9;
		 str = s;
		 index2.clear();
		 index3.clear();
		 dp(num,s);
		 getnum(str);  printf("\n");
	 }
	 
}


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