蓝桥杯:带分数 求教dfs

    科技2022-07-13  141

    题干如下: 100 可以表示为带分数的形式:100 = 3 + 69258 / 714

    还可以表示为:100 = 82 + 3546 / 197 注意特征:带分数中,数字1~9分别出现且只出现一次(不包含0)。 类似这样的带分数,100 有 11 种表示法。

    题目要求: 从标准输入读入一个正整数N (N<1000*1000) 程序输出该数字用数码1~9不重复不遗漏地组成带分数表示的全部种数。 注意:不要求输出每个表示,只统计有多少表示法!

    例如: 用户输入: 100 程序输出: 11

    再例如: 用户输入: 105 程序输出: 6

    资源约定: 峰值内存消耗(含虚拟机) < 64M CPU消耗 < 3000ms

    请严格按要求输出,不要画蛇添足地打印类似:“请您输入…” 的多余内容。

    所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。 注意:不要使用package语句。不要使用jdk1.6及以上版本的特性。 注意:主类的名字必须是:Main,否则按无效代码处理。

    我的的代码如下:

    #include<bits/stdc++.h> #define maxlen 100010 using namespace std; int res; int times=0; int N; char n[10]={'0','1','2','3','4','5','6','7','8','9'}; int string2num(string now) { int temp=0; for(int i=0;i<now.length();i++) { temp+=(now[i]-'0')*pow(10,now.length()-i-1); } return temp; } void dfs(string a,string b,string c,int now) { if(string2num(a)>=N||now>10) { return ; } if(string2num(a)==82&&string2num(b)==3546&&string2num(c)==197) { cout<<"getone"<<endl; } if(now==10&&(N-string2num(a))*string2num(c)==string2num(b)) { res++; return ; } string aNew=a+n[now]; string bNew=b+n[now]; string cNew=c+n[now]; dfs(aNew,b,c,now+1); dfs(a,bNew,c,now+1); dfs(a,b,cNew,now+1); return ; } int main() { cin>>N; string a=""; a=a+n[4]; dfs("","","",1); cout<<res; return 0; }

    答案一直有问题,string2num函数测试过了也没有问题,我觉得可能是dfs写错了,求教有没有大神可以帮忙指出一下错误,谢谢。

    Processed: 0.014, SQL: 8