zoukankan      html  css  js  c++  java
  • 和我一起从0学算法(C语言版)(三)

    第二章 暴力求解(枚举法)

    第一节 小学奥数题—程序求解

    观察下面的加法算式:
          祥 瑞 生 辉
      +   三 羊 献 瑞

    三 羊 生 瑞 气
    其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字,且“三”字不为 0 。

    请计算所有的汉字代表什么意思。

    这是一道经典的小学奥数题,相信有不少同学曾经遇到过类似的题目,如果单纯的笔算将花费大量的时间,而暴力求解则可以利用计算机快速得出结果。而且不需要思考任何数字的可能值。

    给出代码,大家自己体会:

    #include<stdio.h>
    int main() {
       int a,b,c,d,e,f,g,h; // 由a-h分别代表汉字:祥 瑞 生 辉 三 羊 献 气 
           for(a=0;a<10;a++) {
           for(b=0;b<10;b++) {
           for(c=0;c<10;c++) {
           for(d=0;d<10;d++) {
           for(e=1;e<10;e++) { // e 代表汉字 “三 ”,其不为 0 ,所以初始化为 1 
           for(f=0;f<10;f++) {
           for(g=0;g<10;g++) {
           for(h=0;h<10;h++) {
    	   int n = a*1000+b*100+c*10+d;
    	   int m = e*1000+f*100+g*10+b;
    	   int k = e*10000+f*1000+c*100+b*10+h;
    	   int l = n+m;
    	   if(k==l && a!=b && a!=c && a!=d && a!=e && a!=f && a!=g && a!=h && b!=c && b!=d && b!=e && b!=f && b!=g && b!=h && c!=d && c!=e && c!=f && c!=g && c!=h && d!=e && d!=f && d!=g && d!=h && e!=f && e!=g && e!=h && f!=g && f!=h && g!=h) {
    	   printf("%d,%d,%d
    ",n,m,k);
    	   printf("祥=%d,瑞=%d,生=%d,辉=%d,三=%d,羊=%d,献=%d,气=%d
    ",a,b,c,d,e,f,g,h); 
    	   }}}}}}}}}	
        return 0;
    }
    

    暴力题很烦,只给出一道例题,以后如果有好的题,再写出来吧。

    附:诗

    浣溪沙

    ——纳兰性德

    谁念西风独自凉,萧萧黄叶闭疏窗,沉思往事立残阳。
    被酒莫惊春睡重,赌书消得泼茶香,当时只道是寻常。

    以上。

  • 相关阅读:
    环形缓冲区: ringbuf.c
    Linux内核中_IO,_IOR,_IOW,_IOWR宏的用法与解析
    list.h在用户态下的应用
    如何优雅的拔盘?
    谨慎调整内核参数:vm.min_free_kbytes
    Linux内核tracepoints
    网卡多队列
    How to use pthread_create && mutex?
    美国电子工程师最值得打工的50个东家
    关于零点和极点的讨论
  • 原文地址:https://www.cnblogs.com/mxwbq/p/6723446.html
Copyright © 2011-2022 走看看