您现在的位置是:主页 > news > 网站开发毕业设计代做/个人网站seo入门
网站开发毕业设计代做/个人网站seo入门
admin2025/5/7 22:34:48【news】
简介网站开发毕业设计代做,个人网站seo入门,代做网站的公司有哪些,百度转wordpress历届试题 带分数 时间限制:1.0s 内存限制:256.0MB问题描述100 可以表示为带分数的形式:100 3 69258 / 714。 还可以表示为:100 82 3546 / 197。 注意特征:带分数中,数字1~9分别出现且只出现一次&…
网站开发毕业设计代做,个人网站seo入门,代做网站的公司有哪些,百度转wordpress历届试题 带分数 时间限制:1.0s 内存限制:256.0MB问题描述100 可以表示为带分数的形式:100 3 69258 / 714。 还可以表示为:100 82 3546 / 197。 注意特征:带分数中,数字1~9分别出现且只出现一次&…
http://lx.lanqiao.cn/problem.page?gpid=T26
历届试题 带分数
时间限制:1.0s 内存限制:256.0MB
问题描述
100 可以表示为带分数的形式:100 = 3 + 69258 / 714。
还可以表示为:100 = 82 + 3546 / 197。
注意特征:带分数中,数字1~9分别出现且只出现一次(不包含0)。
类似这样的带分数,100 有 11 种表示法。
输入格式
从标准输入读入一个正整数N (N<1000*1000)
输出格式
程序输出该数字用数码1~9不重复不遗漏地组成带分数表示的全部种数。
注意:不要求输出每个表示,只统计有多少表示法!
样例输入1
100
样例输出1
11
样例输入2
105
样例输出2
6
值得一做的搜索 直接暴力搜索的话肯的超时的
很多题目都是暴力加上剪枝就能解决
按位数来解决 分子位数肯定大于分母 a位数再加一个b位数最多也就是他们大的进一位 一个a位数除以一个b位数得(a-b)位数或(a-b+1)
#include<stdio.h>
#include<string.h>
int vis[20];
int w,a,r,ks,total;
int pd(int x,int y)
{if((x==w&&y<=w)||(y==w&&x<=w)||(x==w&&y==w))return 1;return 0;}int jw(int k) //计算多少位
{int sum=0;while(k){sum++;k/=10;}return sum;
}int POW(int h)
{int ans=1;for(int i=1; i<h; i++)ans*=10;return ans;
}int check(int m)
{char str[10];int kk=0;memset(vis,0,sizeof(vis));while(m){str[kk++]=m%10+'0';m/=10;}int flag=0;for(int i=0; i<kk; i++)if(str[i]>'9'||str[i]<'1')return 0;for(int i=0; i<kk-1; i++){for(int j=i+1; j<kk; j++){if(str[i]==str[j]){flag=1;break;}}if(flag)break;}if(flag) return 0;for(int i=0; i<kk; i++)vis[str[i]-'0']=1;return 1;
}int checkk(int m)
{char str[10];int kk=0;while(m){str[kk++]=m%10+'0';m/=10;}int flag=0;for(int i=0; i<kk; i++)if(str[i]>'9'||str[i]<'1')return 0;for(int i=0; i<kk-1; i++){for(int j=i+1; j<kk; j++){if(str[i]==str[j]){flag=1;break;}}if(flag)break;}if(flag) return 0;for(int i=0; i<kk; i++)if(vis[str[i]-'0'])return 0;return 1;
}void dfs(int cnt,int k)
{if(k==a){int ans=cnt*r;int gg=jw(ans);if(gg==9-a-ks)if(checkk(ans)){total++;// printf("%d %d %d\n",ans,cnt,r);}return ;}for(int i=1; i<10; i++)if(!vis[i]){vis[i]=1;dfs(cnt*10+i,k+1);vis[i]=0;}
}int main()
{int n,go,yo,i,j,k,b1,b2;while(scanf("%d",&n)!=EOF){w=jw(n);total=0;//printf("%d\n",w);for(i=1; i<=w; i++){ks=i;for(j=1; j<=9-i-1; j++){a=9-i-j;if(a>j)continue;b1=j-a;b2=j-a+1;if(pd(b1,w)||pd(b2,w))//剪枝{go=POW(i);yo=go*10;for(k=go; k<yo; k++){r=n-k;if(r<1) continue; //printf("%d %d %d\n",n,k,r);if(check(k))dfs(0,0);}}}}printf("%d\n",total);}return 0;
}