| 网站首页 | 业界新闻 | 小组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
买学问 - 大牛一对一辅导,有问必答买学问 - 专业的付费知识问答平台
共有 21849 人关注过本帖
标题:☐ + ☐ + ☐ = 30, ☐ 里填{1, 3, 5, 7, 9, 11, 13, ...
只看楼主 加入收藏
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
结帖率:100%
  已结贴   问题点数:100  回复次数:8   
☐ + ☐ + ☐ = 30, ☐ 里填{1, 3, 5, 7, 9, 11, 13, 15} 可以重复填


当然答案是不存在的 不过我想知道用C语言实现 有没有简洁的方法 因为用C++写是很简洁的

程序代码:
// g++ -Wall -fomit-frame-pointer -funroll-loops -Ofast -msse4.2 -mavx -std=c++11 a.cpp -lm -o a

#include <iostream>
#include <vector>

using std::cout;
using std::cin;
using std::endl;
using std::vector;

int main(void)
{
    vector<int> nums = {1, 3, 5, 7, 9, 11, 13, 15};
    for (auto i : nums)
        for (auto j : nums)
            for (auto k : nums)
                if (i + j + k == 30)
                    cout << i << " + " << j << " + " << k << " = 30." << endl;
    return 0;
}

附件: 您没有浏览附件的权限,请 登录注册
搜索更多相关主题的帖子: C语言  
2015-05-27 16:07
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:306
帖 子:6396
专家分:37142
注 册:2011-1-18
  得分:50 
肯定不存在呀,三个奇数相加的结果应该还是奇数
2015-05-27 16:15
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
  得分:0 
程序代码:
(setq nums '(1 3 5 7 9 11 13 15))

(loop for i in nums do
      (loop for j in nums do
        (loop for k in nums do
          (if (= 30 (+ i j k))
              (message "%d + %d + %d = 30" i j k)))))


Emacs Lisp
2015-05-27 16:17
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
  得分:0 
以下是引用rjsp在2015-5-27 16:15:53的发言:

肯定不存在呀,三个奇数相加的结果应该还是奇数

我想知道C语言实现的话是什么样的 怎么简洁明快
2015-05-27 16:18
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:306
帖 子:6396
专家分:37142
注 册:2011-1-18
  得分:0 
以下是引用zklhp在2015-5-27 16:18:27的发言:


我想知道C语言实现的话是什么样的 怎么简洁明快

和 C++ 代码没什么差别
程序代码:
#include <stdio.h>

int main( void )
{
    const int c[8] = { 1, 3, 5, 7, 9, 11, 13, 15 };
    for( size_t i=0; i!=6; ++i )
        for( size_t j=i+1; j!=7; ++j )
            for( size_t k=j+1; k!=8; ++k )
                if( c[i]+c[j]+c[k] == 30 )
                    printf( "%d + %d + %d = 30\n", c[i], c[j], c[k] );

    return 0;
}
2015-05-27 16:22
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
  得分:0 
以下是引用rjsp在2015-5-27 16:22:18的发言:


和 C++ 代码没什么差别
#include  
 
int main( void )
{
    const int c[8] = { 1, 3, 5, 7, 9, 11, 13, 15 };
    for( size_t i=0; i!=6; ++i )
        for( size_t j=i+1; j!=7; ++j )
            for( size_t k=j+1; k!=8; ++k )
                if( c+c[j]+c[k] == 30 )
                    printf( "%d + %d + %d = 30\n", c, c[j], c[k] );
 
    return 0;
}

学习了
2015-05-27 16:29
do8do8do8
Rank: 9Rank: 9Rank: 9
来 自:沙滩
等 级:蜘蛛侠
威 望:6
帖 子:288
专家分:1456
注 册:2010-7-2
  得分:50 
有解  多的是 比如 (15)11+(15)11+(1)11=(30)11
11进制换成10进制
(15)11=1*11的1次方+5*11的0次方 =26
(15)11=1*11的1次方+5*11的0次方 =26
(1)11=1*11的0次方=1
(30)11=3*11的1次方+0*11的0次方=33

不必非得需要什么才可以
2015-05-27 16:29
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2786
专家分:14619
注 册:2014-10-16
  得分:0 
不是说可以重复吗

一片落叶掉进了回忆的流年。
2015-05-27 19:24
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:126
帖 子:1896
专家分:8309
注 册:2015-3-19
  得分:0 
//三个数相同:10+10+10
//两个数相同:i+j+k=2(i+j)+k奇偶性和k一样都为奇数!=30
//互不相同: 借用上面的结论(三个奇数为为奇数)最大者不小于10最小者不大于10
//综上,非要用代码绝决。。。
#include <stdio.h>

int main( void )
{
    const int c[8] = { 1, 3, 5, 7, 9, 11, 13, 15 };
    for( size_t i=0; i!=6; ++i )
        for( size_t j=i+1; j!=7; ++j )
            for( size_t k=j+1; k!=8; ++k )
                if( c[i]+c[j]+c[k] == 30 )
                    printf( "%d + %d + %d = 30\n", c[i], c[j], c[k] );

    return 0;
}
为什么一点上面的分析也没有?不需要分析?

知命以下无敌
2015-05-27 19:58







关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.031540 second(s), 7 queries.
Copyright©2004-2019, BCCN.NET, All Rights Reserved