做这道题目没什么思路?不知道该怎么下手,求大神讲解一下
ringa_lee
http://blog.csdn.net/houyp520...
最简单的话就是穷举9个数的排列。
优化一点就是先排除一些不可能的情况。比如中间的数是2的倍数,最后的数是3的倍数。诸如此类。
写个递归好了。。或者叫迭代?
公开课西德尼{
}
刘汝佳的题啊。
枚举第一个数, 也就是1:2:3中占比1的那个数。
枚举范围是123~345。根据这个数,去计算其他两个数,然后判定是否恰好用了9个数字即可。
思路很简单,既然要让比例为1:2:3且每个数要用一次,那就直接将1,2,3各放大x倍,然后判断是否满足每个数仅出现一次即可。1只少放大100倍才能达到3位数,所以直接从123开始即可。代码如下。int testa(){
int a=1,b=2,c =3; char szA[10]={0},szB[4]={0},szC[4]={0},cTag[10]={0}; for(int i=123;i<=333;i++) { memset(szA,0x00,10);memset(szB,0x00,4);memset(szC,0x00,4);memset(cTag,0x00,10); sprintf_s(szA,"%d",a*i);sprintf_s(szB,"%d",b*i);sprintf_s(szC,"%d",c*i); strcat_s(szA,szB);strcat_s(szA,szC); int j=0; for(j=0;j<9;j++) { if(cTag[szA[j]-'1']!=0) break; cTag[szA[j]-'1']=1; } if(j==9) printf("%s\n",szA); } return 0;
http://blog.csdn.net/houyp520...
最简单的话就是穷举9个数的排列。
优化一点就是先排除一些不可能的情况。比如中间的数是2的倍数,最后的数是3的倍数。诸如此类。
写个递归好了。。或者叫迭代?
公开课西德尼{
雷雷}
刘汝佳的题啊。
枚举第一个数, 也就是1:2:3中占比1的那个数。
枚举范围是123~345。根据这个数,去计算其他两个数,然后判定是否恰好用了9个数字即可。
思路很简单,既然要让比例为1:2:3且每个数要用一次,那就直接将1,2,3各放大x倍,然后判断是否满足每个数仅出现一次即可。1只少放大100倍才能达到3位数,所以直接从123开始即可。代码如下。
int testa()
{
}