个人主页:天寒雨落的博客_CSDN博客-C,CSDN竞赛,python领域博主 💬 刷题网站:在线刷题 (educoder.net)
特别标注:该博主将长期更新c语言内容,初学c语言的友友们,订阅我的《初学者入门C语言》专栏,关注博主不迷路!
目录
给出四个不同的数字,能够组成多少个不重复的3
位数,按照从小到大的顺序输出,每行一个。
测试用例
1 2 3 4
123 124 132 134 142 143 213 214 231 234 241 243 312 314 321 324 341 342 412 413 421 423 431 432
#include <stdio.h>
void composeNumber(int a, int b, int c, int d);
int main() {
// 输入的4个不同数字
int a, b, c, d;
scanf("%d%d%d%d", &a, &b, &c, &d);
composeNumber(a, b, c, d);
}
// 完成这个函数
void composeNumber(int a, int b, int c, int d) {
/********* Begin *********/
int s, num[4];
num[0] = a;
num[1] = b;
num[2] = c;
num[3] = d;
for (int i = 0; i < 4; i++) {
s = 0;
for (int j = 0; j < 4; j++) {
s = num[i] * 100;
if (num[j] != num[i]) {
s += num[j] * 10;
} else
continue;
for (int k = 0; k < 4; k++) {
if (num[k] != num[j] && num[k] != num[i]) {
s += num[k];
printf("%d\n", s);
s -= num[k];
} else
continue;
}
}
}
/********* End *********/
}
在每个循环刚开始的时候都要重置一下s,不然在算新的循环时会用上次循环结束的值,就比如上面如果不加重置的话会出现除1,2,3,4的其他数,第一次循环的重置为0,第二次循环的重置为 s = num[i] * 100;也就是每次循环到这里只有百位是确定好的,其他位置还没有确定,第三次重置因为下面没有循环了,所以要把重置内容放在循环的末尾,如果加了个位,就在输出完删去,这样保证下次再加个位还是个位为0,如果没有加个位也就不用重置。
执行结果
它会把数组中元素的排列顺序都排列一遍后返回一个false,在此之前都返回的是true
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
int a[4];
for (int i = 0; i < 4; i++) {
scanf("%d", &a[i]);
}
do {
for (int i = 0; i < 3; i++) {
printf("%d", a[i]);
}
printf("\n");
} while (next_permutation(a, a + 4));
return 0;
}
各位C语言的初学者有问题随时都可以问我,随时为您解惑!!!
👍+✏️+⭐️是对博主最大的鼓励与支持!!!