C++编程有趣的标题1 于1~9填写的运算结果的中间符号等于100

简介:

   于1 2 3 4 5 6 7 8 9将九个数字“+”要么“-”符号使得结果100,编程的所有组合。

注意:数字顺序不能改变

<pre name="code" class="cpp">nclude <stdio.h>
#include <iostream>
#include <memory.h>

#define NUM 6561                   //3^8:6561
using namespace std;
int mici(int x, int i)             //求解x^i
{
 int res = 1;
 for (; i>0; i--)
 {
        res *= x;
 }
 return (res);
}

int main(int argc, char *argv[])
{
 int data[9];
 int index, level;
 int i, j, k=0;
 int pre_sign;
 int temp = 0;
 int sum = 0;
 int x = 2;

 for (i=0; i<NUM; i++)              //总共同拥有6561种可能
 {
  memset(data, 0, sizeof(int)*9);   //清零
  index = i;
  for (level=9; level>1; level--)   //有8处符号须要推断
  {
   pre_sign = index%3;              //该空的符号,规定0:+,1:-。2:连接
   index = index/3;                 //往上一层(即上一个空)的位置
   switch(pre_sign)
   {
   case 0:
       if (temp == 0)
       {
     data[k] = level;
       }
    else
    {
     data[k] = temp;
     temp = 0;
     x = 2;
    }
    k++;
    break;
   case 1:
       if (temp == 0)
       {
     data[k] = 0 - level;
       }
    else
    {
     data[k] = 0 - temp;
     temp = 0;
     x = 2;
    }
    k++;
    break;
   case 2:
    if (temp == 0)
    {
     temp = level + (level-1)*10;
    }
    else
    {
                    temp = temp + (level-1)*mici(10,x);
     x++;
    }
    break;
   default:
    break;
   }
  }

  if (pre_sign == 2)              //处理数字1
  {
   data[k] = temp;
  }
  else
  {
   data[k] = 1;
  }
  k = 0;                          //将这些变量复位非常重要。以免影响下一轮。
  temp = 0;
  x = 2;

  for (j=0; data[j]!=0; j++)      //求和
  {
   sum = sum + data[j];
  }

  if (sum == 100)
  {
   for (j=j-1; j>=0; j--)          //逆序输出,这样1在前面
   {
    if (data[j] >0)
    {
        cout<<"+"<<data[j];
    }
    else
    {
     cout<<data[j];
    }
   }
   cout<<" = "<<sum<</*"....."<<i<<*/endl; //i for test
  }
  sum = 0;
 }
 return(0);
}


 
</pre><pre name="code" class="cpp">
  这是我在网上无意间看到的,认为非常有意思,自己就在电脑上试了一下,100多行源码打了半个多小时。最后也还是出现了错误。最后在一个专业的学长的帮助下攻克了问题,原来是编译器的不同导致的。

看来还得好好了解下不同编译器导致的不同问题啊。还有 凝视中尽管说有6561种可能,但不知道为什么最后仅仅出现了11种。有待加强改进啊

  相信自己有朝一日可以自己写出此代码,继续加油!。。 酒吧 年青^0^

版权声明:本文博主原创文章。博客,未经同意不得转载。







本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/4883696.html,如需转载请自行联系原作者


相关文章
|
27天前
|
安全 算法 C++
【C/C++ 泛型编程 应用篇】C++ 如何通过Type traits处理弱枚举和强枚举
【C/C++ 泛型编程 应用篇】C++ 如何通过Type traits处理弱枚举和强枚举
46 3
|
29天前
|
安全 算法 编译器
【C++ 泛型编程 进阶篇】深入探究C++模板参数推导:从基础到高级
【C++ 泛型编程 进阶篇】深入探究C++模板参数推导:从基础到高级
246 3
|
29天前
|
存储 算法 编译器
【C++ TypeName用法 】掌握C++中的TypeName:模板编程的瑞士军刀
【C++ TypeName用法 】掌握C++中的TypeName:模板编程的瑞士军刀
237 0
|
29天前
|
安全 算法 C++
【C++泛型编程 进阶篇】模板返回值的优雅处理(二)
【C++泛型编程 进阶篇】模板返回值的优雅处理
32 0
|
29天前
|
安全 算法 编译器
【C++泛型编程 进阶篇】模板返回值的优雅处理(一)
【C++泛型编程 进阶篇】模板返回值的优雅处理
43 0
|
29天前
|
存储 网络协议 C语言
【C/C++ 串口编程 】深入探讨C/C++与Qt串口编程中的粘包现象及其解决策略
【C/C++ 串口编程 】深入探讨C/C++与Qt串口编程中的粘包现象及其解决策略
78 0
|
29天前
|
算法 编译器 数据库
【C++ 泛型编程 高级篇】使用SFINAE和if constexpr灵活处理类型进行条件编译
【C++ 泛型编程 高级篇】使用SFINAE和if constexpr灵活处理类型进行条件编译
245 0
|
29天前
|
机器学习/深度学习 算法 编译器
【C++ 泛型编程 中级篇】深度解析C++:类型模板参数与非类型模板参数
【C++ 泛型编程 中级篇】深度解析C++:类型模板参数与非类型模板参数
47 0
|
29天前
|
设计模式 程序员 C++
【C++ 泛型编程 高级篇】C++模板元编程:使用模板特化 灵活提取嵌套类型与多容器兼容性
【C++ 泛型编程 高级篇】C++模板元编程:使用模板特化 灵活提取嵌套类型与多容器兼容性
255 2
|
29天前
|
算法 安全 C++
【C++ 泛型编程 入门篇】深入探索C++的numeric_limits:全面理解数值界限(一)
【C++ 泛型编程 入门篇】深入探索C++的numeric_limits:全面理解数值界限
45 0

热门文章

最新文章