【发布时间】:2018-01-16 18:24:43
【问题描述】:
我有一个作业不允许我使用“[]”,只能使用指针来完成。
到目前为止,我的代码运行良好,但是在打印 6 个 K 数字的所有可能组合时遇到了问题。
这是我的代码:
# include <stdio.h>
int main() {
system("chcp 1253");
int a, i, j, temp, *ar, k, I, J, K;
printf("Numbers must be 6 or 49.\n"); /*User can enter 6-49 numbers*/
scanf("%d",&a);
while(a<6 || a>49) {
printf("Wrong, choose again: \n");
scanf("%d", &a);
}
ar = (int*) malloc(a*sizeof(int)); /*Creating array*/
system("cls");
printf("Choosing numbers*/
for (i=0; i<a; i++) {
scanf("%d", ar+i);
while (*(ar+i)<1 || *(ar+i)>49) { /*Numbers must be greater than 1 and less than 49*/
printf("Wrong number, choose again: \n");
scanf("%d", ar+i);
}
}
for (i=0; i<a; i++) { /*Sorting array*/
for (j=i+1; j<a; j++) {
if (*(ar+i) > *(ar+j)) {
temp = *(ar+i);
*(ar+i) = *(ar+j);
*(ar+j) = temp;
}
}
}
printf("\n\n"); /*Printing all possible 6 combinations of K numbers*/
for(i=1; i<=a-5; i++) {
for(j=i+1; j<=a-4; j++) {
for(k=j+1; k<=a-3; k++) {
for(I=k+1; I<=a-2; I++) {
for(J=I+1; J<=a-1; J++) {
for(K=J+1; K<=a; K++) {
printf("%d|%d|%d|%d|%d|%d|\n", *(ar), *(ar+i), *(ar+j), *(ar+k), *(ar+I), *(ar+J));
}
}
}
}
}
}
free(ar);
return 0;
}
假设用户输入了 6 个数字,组合的打印是正确的 (1|2|3|4|5|6)。
但是如果用户选择其他任何东西,例如 7 个数字,结果是:
1|2|3|4|5|6
1|2|3|4|5|6
1|2|3|4|5|7
1|2|3|4|6|7
1|2|3|5|6|7
1|2|4|5|6|7
1|3|4|5|6|7
我被卡住了,我不知道我出了什么问题,请给点提示吗?
我 95% 确定错误出在 printf 上,但我尝试了几次更改,但都没有成功。
对不起我的英语,
干杯,
代言人
【问题讨论】:
-
经验法则:如果您有超过 3 个嵌套循环,那么您可能会做出更好的设计。
-
你没有在最里面的循环中使用
K。 -
@WeatherVane 如果我添加 *(ar+K) (当然更改所有 *(ar+i,j,k..),它不会显示第一个数字,那个用户输入。