| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2466 人关注过本帖
标题:有0、1、2、4这4个数字,能组成多少个互不相同且个位、十位、百位数之和为4 ...
只看楼主 加入收藏
A18625303151
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2019-10-17
结帖率:0
收藏
已结贴  问题点数:20 回复次数:6 
有0、1、2、4这4个数字,能组成多少个互不相同且个位、十位、百位数之和为4的三位数(各位可以相同)?都是多少? 输出格式为:先输出有多少个,再依次输出各个数
求助大佬
有0、1、2、4这4个数字,能组成多少个互不相同且个位、十位、百位数之和为4的三位数(各位可以相同)?都是多少?

C语言输出格式为:先输出有多少个,再依次输出各个数,数之间以空格隔开。

搜索更多相关主题的帖子: 之和 多少 位数 输出 相同 
2019-10-17 10:45
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:5 
你的代码呢?
即便没有代码,那你的思路呢?

程序代码:
#include <stdio.h>

int main( void )
{
    for( unsigned i=4*4; i!=4*4*4; ++i )
    {
        unsigned a = (i/16)*4/3;
        unsigned b = (i/4%4)*4/3;
        unsigned c = (i%4)*4/3;
        if( a+b+c == 4 )
            printf( "%u%u%u\n", a, b, c );
    }
}

2019-10-17 14:18
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1745
专家分:3216
注 册:2015-12-2
收藏
得分:5 
回复 2楼 rjsp
没看懂,能讲解下吗?
2019-10-17 15:39
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
回复 3楼 ehszt
有0、1、2、4这4个数字
既然是“4个数字”,那就是四进制的 100 101 102 103 110 111 112 113 …… 333
所以有代码
for( unsigned i=4*4; i!=4*4*4; ++i )
{
    unsigned a = i/16;
    unsigned b = i/4%4;
    unsigned c = i%4;

其中特殊的是 0表示0、1表示1、2表示2、3表示4
可以用 if(a==3)++a; if(b==3)++b; if(c==3)++c; 来转换,但代码麻烦,
算法是如果等于或超过3就加一,那么公式是 x + x/3,也就是 x*4/3,所以最终代码
for( unsigned i=4*4; i!=4*4*4; ++i )
{
    unsigned a = (i/16)*4/3;
    unsigned b = (i/4%4)*4/3;
    unsigned c = (i%4)*4/3;
收到的鲜花
  • ehszt2019-10-17 16:13 送鲜花  10朵   附言:高手,强!!
  • bcbbcclbbc2019-10-17 21:52 送鲜花  5朵  
2019-10-17 15:58
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1745
专家分:3216
注 册:2015-12-2
收藏
得分:0 
回复 4楼 rjsp
明白了,谢谢!
2019-10-17 16:17
云不喜
Rank: 2
等 级:论坛游民
威 望:1
帖 子:11
专家分:16
注 册:2019-8-25
收藏
得分:5 
回复 楼主 A18625303151
如下
可能比起大佬的麻烦(那啥)了点,但应该比较容易理解,而且先输出了个数,再出结果。。

# include <stdio.h>

int main(void)
{
    int a[100]={0};
    int amount=0;
    int i,j=0;
    int g,s,b;

    for(i=100; i<1000; ++i)
    {
        g = i%10;
        s = (i%100)/10;
        b = i/100;

        if(g+s+b == 4)
            if(g==0 || g==1 || g==2 || g==4)
                if(s==0 || s==1 || s==2 || s==4)
                    if(b==0 || b==1 || b==2 || b==4)
                    {
                        ++amount;
                        a[j] = i;
                        ++j;
                    }
    }

    printf("%d\n",amount);

    for(j=0; j<amount; ++j)
        printf("%d ",a[j]);
    printf("\n");

    return 0;
}

收获越多,动力越大!
2019-10-17 18:46
bcbbcclbbc
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:11
帖 子:194
专家分:528
注 册:2019-8-15
收藏
得分:5 
小鸡啄米
#include<stdio.h>
int main()
{
    int a[4]={0,1,2,4};
    int i,j,k;
    int b[3*4*4]={0};
    int l=0;
   
    for(i=1;i<4;i++)   //百位
      for(j=0;j<4;j++)  //十位
        for(k=0;k<4;k++)  //个位
          if(a[i]+a[j]+a[k]==4) b[l++]=a[i]*100+a[j]*10+a[k];
         
    printf("%d\n",l);
    for(i=0;i<l;i++)
    printf("%4d",b[i]);
    return 0;
}
2019-10-17 22:08
快速回复:有0、1、2、4这4个数字,能组成多少个互不相同且个位、十位、百位数之 ...
数据加载中...
 
   



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

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