首页 > 代码库 > hdu1010

hdu1010

大意:在5--12个字符中找到满足给出等式的字符串,并是按照字典序最大的串。

对字符串排序,每次挑选5个可能最大的字符,进行匹配,不符合,则把其中最小的换掉。通过简单的暴力枚举就可实现。

例如:s=987654; 枚举:98765-98764-98756-98754……

#include <iostream>#include <string>#include <algorithm>#include <math.h>using namespace std;bool cmp(char c1, char c2){    if(c1>c2) return true;    else return false;}int main(){    string s;    int target;    int k1,k2,k3,k4,k5;    string result;    while(true){        cin>>target>>s;        if(target==0 && s=="END") break;        sort(s.begin(), s.end(), cmp);        int len=s.size();        result="";        for(k1=0; k1<len; k1++){            for(k2=0; k2<len; k2++){                if(k1==k2) continue;                for(k3=0; k3<len; k3++){                    if(k3==k1 || k3==k2) continue;                    for(k4=0; k4<len; k4++){                        if(k4==k3 || k4==k2 || k4==k1) continue;                        for(k5=0; k5<len; k5++){                            if(k5==k1 || k5==k2 || k5==k3 || k5==k4) continue;                            if(s[k1]-A+1-(s[k2]-A+1)*(s[k2]-A+1) + pow((s[k3]-A+1)*1.0,3) - pow((s[k4]-A+1)*1.0,4) +pow((s[k5]-A+1)*1.0,5)==target){                                result=result+s[k1]+s[k2]+s[k3]+s[k4]+s[k5];                                goto here;                            }                        }                    }                }            }        }here:        if(result != "") cout<<result<<endl;        else cout<<"no solution"<<endl;    }    return 0;}

hdu1010