c语言凑算式方法,蓝桥杯第七届C/C++B省赛凑算式

第三题:

凑算式

B      DEFA + --- + ------- = 10C     GHI(如果显示有问题,可以参见【图1.jpg】)这个算式中A~I代表1~9的数字,不同的字母代表不同的数字。

4818af46f5a1af7ceeb363969b780e5f.png比如:6+8/3+952/714 就是一种解法,5+3/1+972/486 是另一种解法。这个算式一共有多少种解法?注意:你提交应该是个整数,不要填写任何多余的内容或说明性文字。

就一个控制精度问题,其他的没有了。

答案 : 29

第一种:dfs,搜索每一个位置,确定当前的数,最后统一计算(终于自己都看不下去以前写的无穷for了QAQ)

源代码:

#include

#include

#include

#include

#include

#include

int flag[11];

int ans[11];

int sum=0;

using namespace std;

void dfs(int pos) {

if(pos==10) {

double t1=(double)ans[1];

double t2=((double)ans[2])/((double)ans[3]);

double t3=((double)(ans[4]*100+ans[5]*10+ans[6]))/((double)(ans[7]*100+ans[8]*10+ans[9]));

double result=t1+t2+t3;

if(fabs(result-10.0)<=1e-8) {

sum++;

}

return;

}

for(int i=1;i<=9;++i) {

if(!flag[i]) {

ans[pos]=i;

flag[i]=1;

dfs(pos+1);

flag[i]=0;

}

}

}

int main() {

memset(flag,0,sizeof(flag));

memset(ans,0,sizeof(ans));

dfs(1);

printf("%d\n",sum);

return 0;

}

第二种:暴力for循环(直接跳过吧)

源代码:

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using namespace std;

#define MAX 0x3f3f3f3f

#define MIN -0x3f3f3f3f

#define PI 3.14159265358979323

#define N 1005

int main()

{

int a, b, c, d, e, f, g, h, i;

int sum = 0;

for (a = 1; a <= 9; a++)

{

for (b = 1; b <= 9; b++)

{

if (b == a)

continue;

for (c = 1; c <= 9; c++)

{

if (c == b || c == a)

continue;

for (d = 1; d <= 9; d++)

{

if (d == a || d == b || d == c)

continue;

for (e = 1; e <= 9; e++)

{

if (e == a || e == b || e == c || e == d)

continue;

for (f = 1; f <= 9; f++)

{

if (f == a || f == b || f == c || f == d || f == e)

continue;

for (g = 1; g <= 9; g++)

{

if (g == a || g == b || g == c || g == d || g == e || g == f)

continue;

for (h = 1; h <= 9; h++)

{

if (h == a || h == b || h == c || h == d || h == e || h == f || h == g)

continue;

for (i = 1; i <= 9; i++)

{

if (i == a || i == b || i == c || i == d || i == e || i == f || i == g || i == h)

continue;

else

{

if (fabs(a*1.0 + b*1.0 / c + (d * 100 + e * 10 + f)*1.0 / (g * 100 + h * 10 + i) - 10.00) < 0.0000000001)

{

sum++;

printf("%d%d%d%d%d%d%d%d%d\n", a, b, c, d, e, f, g, h, i);

printf("%.6lf\n", a*1.0 + b*1.0 / c + (d * 100 + e * 10 + f)*1.0 / (g * 100 + h * 10 + i));

}

}

}

}

}

}

}

}

}

}

}

printf("%d\n", sum);

return 0;

}

a8a91576590e9f67aee67008c787d9f6.png

来源:https://www.cnblogs.com/lemonbiscuit/p/7776139.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值