#include<stdio.h>
#define _ CRT_SECURE_NO_WARNINGS
int main()
{
int a;
scanf_s("%d", &a);
int i=0, j=0, k=0;
int cnt = 0;
i = a;
while (i <= a + 3){
j = a;

while (j <= a + 3)
{
k = a;
while (k <= a + 3);
{
if (i != j)
{
if (i != k)
{
if (j != k)
{
printf("%d%d%d", i, j, k);
if(cnt==6)
{
printf("\n");
cnt = 0;
}
else {
printf(" ");
}
}
}
}
k++;
}
j++;
}
i++;
}
return 0;
}
while (k <= a + 3);
这里多了分号
#include<stdio.h>
#define _ CRT_SECURE_NO_WARNINGS
int main()
{
int a;
scanf_s("%d", &a);
int i, j, k;
int cnt = 0;
i = a;
while (i <= a + 3){
j = a;
while (j <= a + 3)
{
k = a;
while (k <= a + 3)
{
if (i != j && i != k && j != k)
{
printf("%d%d%d ", i, j, k);
cnt++;
if (cnt == 6)
{
printf("\n");
cnt = 0;
}
}
k++;
}
j++;
}
i++;
}
return 0;
}
不知道你这个问题是否已经解决, 如果还没有解决的话:有两种方法:
1:数学方法:
代码如下:
#include<stdio.h>
int main()
{
int a = 20;
int b = 30;
printf("交换前的值为%d,%d\n", a, b);
a = a + b;
b = a - b;
a = a - b;
printf("交换后的值为%d,%d\n", a, b);
return 0;
}
运行结果如下:
2:异或方法:
#include<stdio.h>
int main()
{
int a = 10;
int b = 20;
printf("交换前的值为%d,%d\n", a, b);
a = a^b;
b = a^b;
a = a^b;
printf("交换后的值为%d,%d\n", a, b);
return 0;
}
运行结果如下:
问题出在isDuplicate函数的实现上。在判断数字是否重复时,只是简单地比较数组中的元素与给定数字是否相等,并没有考虑到数字之间不能重复出现。
具体解决方案如下:
下面是修改后的代码:
#include <stdio.h>
#include <string.h>
// 判断数字是否重复
int isDuplicate(int num, int arr[])
{
char strNum[4];
sprintf(strNum, "%d", num);
int i;
for (i = 0; i < 4; i++)
{
char strArr[4];
sprintf(strArr, "%d", arr[i]);
if (strcmp(strNum, strArr) == 0)
{
return 1;
}
}
return 0;
}
int main()
{
int numArr[4];
int i, j, k;
printf("请输入4个数字:");
for (i = 0; i < 4; i++)
{
scanf("%d", &numArr[i]);
}
printf("由这4个数字组成的无重复的三位数为:\n");
for (i = 0; i < 4; i++)
{
for (j = 0; j < 4; j++)
{
if (j != i)
{
for (k = 0; k < 4; k++)
{
if (k != i && k != j)
{
int num = numArr[i] * 100 + numArr[j] * 10 + numArr[k];
if (!isDuplicate(num, numArr))
{
printf("%d\n", num);
}
}
}
}
}
}
return 0;
}
现在运行程序,输入4个数字后,即可正确输出所有由这4个数字组成的无重复的三位数。