
#include <stdio.h>
const int N = 5;
int h[6];
int main() {
int i, j, k, l, m;
for(i = 1; i <= N; ++i) {
h[i] = 1; // (1)
for(j = 1; j <= N; ++j) {
if(h[j]) continue; // (2)
h[j] = 1;
for(k = 1; k <= N; ++k) {
if(h[k]) continue; // (3)
h[k] = 1;
for(l = 1; l <= N; ++l) {
if(h[l]) continue; // (4)
h[l] = 1;
for(m = 1; m <= N; ++m) {
if(h[m]) continue; // (5)
printf("%d%d%d%d%d\n", i, j, k, l, m);
}
h[l] = 0; // (6)
}
h[k] = 0; // (7)
}
h[j] = 0; // (8)
}
h[i] = 0; // (9)
}
return 0;
}
思路:
设置辅助数组h
h中i元素置一说明序列中i元素已经被选
五层循环,每层循环选一个数,选到的数置一,在后续循环中要判断h[j](当层循环)是否为1,如果为1则跳过)
(如第一次循环中第一个数字为1,h[1]置一,则在j循环j=1时,因为h[i]=1所以要跳过)
当循环结束时,将对应h置0
练习题1


学习一下双指针
思路:两个字符串,指针先都指向起点,如果指向的元素相同,则两个指针都加一,如果不同,则s(较长的串)+1,当判断j(较长串的指针)指到末尾时,判断i(短串指针)是否到末尾
到末尾,则符合


做过了复习下
本文通过实例讲解了双指针在字符串比较中的应用,并深入剖析了五层嵌套循环的逻辑,展示了如何利用辅助数组优化查找过程。同时,涉及到了辅助数组h在避免重复选择中的关键作用。
1238

被折叠的 条评论
为什么被折叠?



