zoukankan      html  css  js  c++  java
  • 蓝桥杯第七届C/C++B省赛凑算式

    第三题:

    凑算式


           B      DEF
    A + --- + ------- = 10
           C     GHI

    (如果显示有问题,可以参见【图1.jpg】)


    这个算式中A~I代表1~9的数字,不同的字母代表不同的数字。


    比如:
    6+8/3+952/714 就是一种解法,
    5+3/1+972/486 是另一种解法。


    这个算式一共有多少种解法?


    注意:你提交应该是个整数,不要填写任何多余的内容或说明性文字。


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

    答案 : 29

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

    源代码:

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<string>
    #include<algorithm>
    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
    ",sum);
        return 0;
    }
    


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

    源代码:

    #include<iostream>
    #include<stdio.h>
    #include<stdlib.h>
    #include<string>
    #include<string.h>
    #include<math.h>
    #include<map>
    #include<vector>
    #include<algorithm>
    #include<queue>
    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
    ", a, b, c, d, e, f, g, h, i);
    												printf("%.6lf
    ", a*1.0 + b*1.0 / c + (d * 100 + e * 10 + f)*1.0 / (g * 100 + h * 10 + i));
    											}
    										}
    									}
    								}
    							}
    						}
    					}
    				}
    			}
    		}
    	}
    	printf("%d
    ", sum);
    	return 0;
    }


  • 相关阅读:
    Linux的内存分页管理
    python3将汉字转换为大写拼音首字母
    linux下安装微信小程序开发工具
    有效使用Django的QuerySets
    VsCode快捷键
    js 里面的键盘事件对应的键码
    ubuntu下wps的安装
    mac 安装 python mysqlclient 遇到的问题及解决方法
    微服务初步理解
    有return的情况下try catch finally的执行顺序(最有说服力的总结)
  • 原文地址:https://www.cnblogs.com/lemonbiscuit/p/7776139.html
Copyright © 2011-2022 走看看