c语言初学者
想打一个程序,输出由1,2,3,4组成的所有三位数,组成的数字不能重复。请问我打的程序错在哪里了,谢谢。#include<stdio.h>
void main()
{
int a, b, c;
for(a = 1;a<=4;a++)
{
for(b = 1;b<=4;)
{
if(b == a) goto tiaoyue1;
tiaoyue1: b = b + 1;
for(c = 1;c<=4;)
{
if( b == c || c == a) goto tiaoyue2;
printf("%d%d%d\n",a,b,c);
tiaoyue2: c = c + 1;
}
}
}
} 本帖最后由 jackz007 于 2019-11-15 01:13 编辑
给你一个参考答案,你还是自己找出代码的问题吧。
#include <stdio.h>
int main(void)
{
int a , b , c ;
for(a = 1 ; a <= 4 ; a ++) {
for(b = 1 ; b <= 4 ; b ++) {
for(c = 1 ; c <= 4 ; c ++) {
if(a != b && a != c && b != c) {
printf("%d%d%d\n" , a , b , c) ;
}
}
}
}
return 0 ;
} 本帖最后由 倒戈卸甲 于 2019-12-3 22:55 编辑
存在语法问题,在b=2及c=2时无限循环,没有离开循环的方案
jackz007 发表于 2019-11-15 00:31
给你一个参考答案,你还是自己找出代码的问题吧。
大佬,问个问题:这样确实可以找到所有的数,但这样看的太费力,如果要一行5个三位数要怎么改?{:10_301:} liuyanxiong 发表于 2019-11-16 09:16
大佬,问个问题:这样确实可以找到所有的数,但这样看的太费力,如果要一行5个三位数要怎么改?{:10_301: ...
#include <stdio.h>
int main(void)
{
int a , b , c , d ;
for(d = 0 , a = 1 ; a <= 4 ; a ++) {
for(b = 1 ; b <= 4 ; b ++) {
for(c = 1 ; c <= 4 ; c ++) {
if(a != b && a != c && b != c) {
if(! (d % 5)) {
if(d) printf("\n") ;
printf("\t") ;
} else {
printf(" , ") ;
}
printf("%d%d%d" , a , b , c) ;
d ++ ;
}
}
}
}
return 0 ;
}
编译、运行实况:
C:\Bin>g++ -o x x.c
C:\Bin>x
123 , 124 , 132 , 134 , 142
143 , 213 , 214 , 231 , 234
241 , 243 , 312 , 314 , 321
324 , 341 , 342 , 412 , 413
421 , 423 , 431 , 432
C:\Bin> jackz007 发表于 2019-11-16 09:56
编译、运行实况:
能解释一下10到14行和17行代码的意思吗{:10_245:}{:10_245:} liuyanxiong 发表于 2019-11-16 15:50
能解释一下10到14行和17行代码的意思吗
if(! (d % 5)) { // 如果已打印次数是 5 的整数倍
if(d) printf("\n") ;// 如果打印次数非零,输出一个回车符
printf("\t") ;// 行首打印一个水平制表符
} else { // 否则,如果打印次数不是 5 的整数倍
printf(" , ") ;// 输出一个 ' , ' 作为项之间的分隔符
}
printf("%d%d%d" , a , b , c) ;// 正常输出要打印的三位数
d ++ ;// 打印次数计数增 1
页:
[1]