编程论坛
注册
登录
编程论坛
→
C语言论坛
有0、1、2、4这4个数字,能组成多少个互不相同且个位、十位、百位数之和为4的三位数(各位可以相同)?都是多少? 输出格式为:先输出有多少个,再依次输出各个数
A18625303151
发布于 2019-10-17 10:45, 2736 次点击
求助大佬
有0、1、2、4这4个数字,能组成多少个互不相同且个位、十位、百位数之和为4的三位数(各位可以相同)?都是多少?
C语言输出格式为:先输出有多少个,再依次输出各个数,数之间以空格隔开。
6 回复
#2
rjsp
2019-10-17 14:18
你的代码呢?
即便没有代码,那你的思路呢?
程序代码:
#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 );
}
}
#3
ehszt
2019-10-17 15:39
回复 2楼 rjsp
没看懂,能讲解下吗?
#4
rjsp
2019-10-17 15:58
回复 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
;
#5
ehszt
2019-10-17 16:17
回复 4楼 rjsp
明白了,谢谢!
#6
云不喜
2019-10-17 18:46
回复 楼主 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;
}
#7
bcbbcclbbc
2019-10-17 22:08
小鸡啄米
#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;
}
1