解题报告:置换的玩笑

测试数据没通过,不知道为什么,做了快一天了

#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");
	 }
	 
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值