蓝桥杯历年省赛真题汇总及题目详解
2013年第四届蓝桥杯省赛试题详解
标题:带分数
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
请严格按要求输出,不要画蛇添足地打印类似:“请您输入…” 的多余内容。
所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
注意: main函数需要返回0
注意: 只使用ANSI C/ANSI C++ 标准,不要调用依赖于编译环境或操作系统的特殊函数。
注意: 所有依赖的函数必须明确地在源文件中 #include , 不能通过工程设置而省略常用头文件。
提交时,注意选择所期望的编译器类型。
#include<stdio.h>
#define mm 105
int a[10]={0,1,2,3,4,5,6,7,8,9};
int ou[10]={0};
int bk[10]={0};
int x,y,z,cnt=0;
void dfs(int s)
{
int i;
if(s>9)
{
1
x = ou[1];
y = ou[2]*10000+ou[3]*1000+ou[4]*100+ou[5]*10+ou[6];
z = ou[7]*100+ou[8]*10+ou[9];
if(y%z==0)
{
if( x+y/z == mm )
{
cnt++;
printf(" %d %d %d \n",x,y,z);
}
}
/// 2
x = ou[1]*10+ou[2];
y = ou[3]*1000+ou[4]*100+ou[5]*10+ou[6];
z = ou[7]*100+ou[8]*10+ou[9];
if(y%z==0)
{
if( x+y/z == mm )
{
cnt++;
printf(" %d %d %d \n",x,y,z);
}
}
}
else
{
for(i=1;i<10;i++)
if( bk[i]==0 )
{
bk[i]=1;
ou[s]=i;
dfs(s+1);
bk[i]=0;
}
}
}
int main()
{
dfs(1);
printf("%d\n",cnt);
return 0;
}