• 古堡算式蓝桥杯


    欢迎访问我的新博客:http://www.milkcu.com/blog/

    原文地址:http://www.milkcu.com/blog/archives/1366851360.html

    简述

    这是2012年蓝桥杯全国软件设计大预赛第2题,问题是求出字母对应的数字。

    推荐链接:《2012蓝桥杯软件大赛预赛题目汇总》

    题目描述

        福尔摩斯到某古堡探险,看到门上写着一个奇怪的算式:

        ABCDE * ? = EDCBA

        他对华生说:“ABCDE应该代表不同的数字,问号也代表某个数字!”
        华生:“我猜也是!”
        于是,两人沉默了好久,还是没有算出合适的结果来。

        请你利用计算机的优势,找到破解的答案。
        把 ABCDE 所代表的数字写出来。
        答案写在“解答.txt”中,不要写在这里!

    分析

    这种类型的题目最简单最直接的方法就是穷举法吧,虽然时间复杂度较大,但是在对性能没要求且基数不是特别大的情况下,肯定能得到答案。

    源代码

    # include <stdio.h>
    int main(void){
    	int a, b, c, d, e;
    	int x;
    	int left, right;
    	
    	left = a * 10000 + b * 1000 + c * 100 + d * 10 + e * 1;
    	right = e * 10000 + d * 1000 + c * 100 + b * 10 + a * 1;
    	
    	for(a = 0; a <= 9; a++){
    		for(b = 0; b <= 9; b++){
    			for(c = 0; c <= 9; c++){
    				for(d = 0; d <= 9; d++){
    					for(e = 0; e <= 9; e++){
    						for(x = 0; x <= 9; x++){
    							left = a * 10000 + b * 1000 + c * 100 + d * 10 + e * 1;
    							right = e * 10000 + d * 1000 + c * 100 + b * 10 + a * 1;
    							if(left * x == right && a !=b && b != c && c != d && d != a && a != c && b != d){
    								printf("%d %d %d %d %d\n", a, b, c, d, e);
    							}
    						}
    					}
    				}
    			}
    		}
    	}
    	printf("\nDone\n");
    	return 0;
    }

    最后答案

    ABCDE 所代表的数字为
    1 0 9 8 9
    2 1 9 7 8

    更新

    原代码存在错误,已更新。

    # include <stdio.h>
    int main(void){
    	int a, b, c, d, e;
    	int x;
    	int left, right;
    	
    	left = a * 10000 + b * 1000 + c * 100 + d * 10 + e * 1;
    	right = e * 10000 + d * 1000 + c * 100 + b * 10 + a * 1;
    	
    	for(a = 0; a <= 9; a++){
    		for(b = 0; b <= 9; b++){
    			if(a == b) {
    				continue;
    			}
    			for(c = 0; c <= 9; c++){
    				if(c == a || c == b) {
    					continue;
    				}
    				for(d = 0; d <= 9; d++){
    					if(d == a || d == b || d == c) {
    						continue;
    					}
    					for(e = 0; e <= 9; e++){
    						if(e == a || e == b || e == c || e == d) {
    							continue;
    						}
    						for(x = 0; x <= 9; x++){
    							left = a * 10000 + b * 1000 + c * 100 + d * 10 + e * 1;
    							right = e * 10000 + d * 1000 + c * 100 + b * 10 + a * 1;
    							if(left * x == right){
    								printf("%d %d %d %d %d\n", a, b, c, d, e);
    							}
    						}
    					}
    				}
    			}
    		}
    	}
    	return 0;
    }

    (全文完)

  • 相关阅读:
    Hibernate学习笔记
    Servlet:从入门到实战学习(3)---Servlet实例【图文】
    Servlet:从入门到实战学习(2)---Servlet生命周期
    Servlet:从入门到实战学习(1)---全·环境配置
    java复习(9)---数据库JDBC
    java复习(8)---I/O
    java复习(7)---集合类、泛型
    java复习(6)---异常处理
    C#尝试读取或写入受保护的内存。这通常指示其他内存已损坏
    C# TTS 文本转语音中断实现方式
  • 原文地址:https://www.cnblogs.com/milkcu/p/3808933.html
Copyright © 2020-2023  润新知