蓝桥杯算法特训第三课【典型问题的递归框架】源代码

【内容简介】
本文章内容为【2018蓝桥杯大赛算法特训(软件)系列课程】第三课【典型问题的递归框架】中涉及到的课上例题的代码实现,加入赛前算法特训获取全部课程内容请联系【小蓝】。


【课程中涉及的源代码】
1. 搭积木
【问题描述】
小明最近喜欢搭数字积木。一共有10块积木,每个积木上有一个数字,0~9。

搭积木规则:
每个积木放到其它两个积木的上面,并且一定比下面的两个积木数字小。
最后搭成4层的金字塔形,必须用完所有的积木。

下面是两种合格的搭法:

0
1 2
3 4 5
6 7 8 9

0
3 1
7 5 2
9 8 6 4

请你计算这样的搭法一共有多少种?

【源代码】
【JAVA:于航】


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
/*
存储位置备忘
   0
  1 2
 3 4 5
6 7 8 9

*/

public class A
{
    static int N;
   
    static void show(int[] a)
    {
        System.out.println("   " + a[0]);
        System.out.println("  " + a[1] + " " + a[2]);
        System.out.println(" " + a[3] + " " + a[4] + " " + a[5]);
        System.out.println("" + a[6] + " " + a[7] + " " + a[8] + " " + a[9]);
        System.out.println();
    }
   
    static boolean near(int a, int b)
    {
        if(a+1==b || a==b+1) return true;
        return false;
    }
   
    static void test(int[] a)
    {
        if(a[1]<a[0]) return;
        if(a[2]<a[0]) return;
        if(a[3]<a[1]) return;
        if(a[4]<a[1]) return;
        if(a[4]<a[2]) return;
        if(a[5]<a[2]) return;
        if(a[6]<a[3]) return;
        if(a[7]<a[3]) return;
        if(a[7]<a[4]) return;
        if(a[8]<a[4]) return;
        if(a[8]<a[5]) return;
        if(a[9]<a[5]) return;
       
        show(a);
        N++;
    }
   
    // a: 待排元素
    // k: 当前考虑的位置
    static void f(int[] a, int k)
    {
        if(k==a.length-1){
            test(a);
            return;
        }
       
        for(int i=k; i<a.length; i++){
            {int t=a[i]; a[i]=a[k]; a[k]=t;}
            f(a,k+1);
            {int t=a[i]; a[i]=a[k]; a[k]=t;}
        }
    }
   
    public static void main(String[] args)
    {
        int[] a = {0,1,2,3,4,5,6,7,8,9};
       
        f(a,0);
       
        System.out.println("N= " + N);
    }
}

【C:志愿者】


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/*
存储位置备忘
0
1 2
3 4 5
6 7 8 9

*/


int N;

void show(int * a,int num)
{
    char * p = malloc((num+1)*sizeof(int));
    int t = 0;
    int flag = 0;

    for (int x = 0; x < 4;x++)
    {
        memset(p, 0, num);
        char ak[10] = { ' ' };
        for (t = 0; t < 3 - x;t++)
        {
            strcat(p, ak);
        }
       
       
        for (int y=0; y <= x; y++)
        {
           
            int x = a[flag];
            _itoa(x, p+t, 10);
           
            t++;
            flag++;
        }

        for (int v = 0; v < t; v++)
        {
            printf("%c ", p[v]);
            if (p[v]!=' ')
            {
                printf("%c ", ' ');
            }
           
        }
        printf("\n");
    }
    printf("\n\n\n");
}

int  near(int a, int b)
{
    if (a + 1 == b || a == b + 1)
        return 1;
    return 0;
}

void test(int *a,int num)
{
    if (a[1] < a[0]) return;
    if (a[2] < a[0]) return;
    if (a[3] < a[1]) return;
    if (a[4] < a[1]) return;
    if (a[4] < a[2]) return;
    if (a[5] < a[2]) return;
    if (a[6] < a[3]) return;
    if (a[7] < a[3]) return;
    if (a[7] < a[4]) return;
    if (a[8] < a[4]) return;
    if (a[8] < a[5]) return;
    if (a[9] < a[5]) return;

    show(a,10);
    N++;
}

//// a: 待排元素
//// k: 当前考虑的位置
void f(int *a,int num, int k)
{
    if (k == num-1){
        test(a,num);
        return;
    }

    for (int i = k; i < num; i++)
    {
        {
            int t = a[i];
            a[i] = a[k];
            a[k] = t;
        }
        f(a, num,k + 1);
        {int t = a[i]; a[i] = a[k]; a[k] = t; }
    }
}

  void main()
{
    int a[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13 };

    f(a, 10,0);
/*  System.out.println("N= " + N);*/
}


2. 代表团出访
【问题描述】

X星球要派出一个5人组成的观察团前往W星。
其中:
A国最多可以派出4人。
B国最多可以派出2人。
C国最多可以派出2人。
D国最多可以派出1人。
E国最多可以派出1人。
F国最多可以派出3人。
那么最终派往W星的观察团会有多少种国别的不同组合呢?
【源代码】
【JAVA:于航】


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public class A
{
    //a:可取最大个数的限定
    //k: 当前考虑位置
    //n: 目标名额
    //s: 已经决定的代表团成员
    public static void f(int[] a, int k, int n, String s)
    {
        if(k==a.length){
            if(n==0) System.out.println(s);
            return;
        }
       
        String s2 = s;
        for(int i=0; i<=a[k]; i++){
            f(a,k+1,n-i,s2);
            s2 += (char)(k+'A');
        }
    }
   
    public static void main(String[] args)
    {
        int[] a = {4,2,2,1,1,3};
       
        f(a,0,5,"");
    }
}

【C语言:志愿者】


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


    //a:可取最大个数的限定
    //k: 当前考虑位置
    //n: 目标名额
    //s: 已经决定的代表团成员
    void fk(int*a,int num1, int k, int n, char *s,int num2)
    {
        if (k == num1){
            if (n == 0)
                printf("%s\n",s);
            return;
        }
        char *s2 = malloc(sizeof(char)*num2);
        strcpy(s2, s);

        for (int i = 0; i <= a[k]; i++)
        {
            fk(a, num1, k + 1, n - i, s2, num2);
           
            char x=k + 'A';
            char arr[10] = { 0 };
            arr[0] = x;
            strcat(s2, arr);           
            num2++;
        }
    }

    void main()
    {
        int a[] = { 4, 2, 2, 1, 1, 3 };

        fk(a,6, 0, 5, "",0);
    }


3. 排列枚举
【问题描述】
已知不同字母构成的串,求它的全排列
【源代码】
【JAVA:于航】


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import java.util.*;
public class A
{  
    static List f(String s){
        List lst = new Vector();
       
        if(s.length()==1){
            lst.add(s);
            return lst;
        }
       
        for(int i=0; i<s.length(); i++){
            char x = s.charAt(i);
            List t = f(s.substring(0,i)+s.substring(i+1));
            for(int k=0; k<t.size(); k++){
                lst.add("" + x + t.get(k));
            }
        }
       
        return lst;
    }

    public static void main(String[] args){
        List lst = f("ABC");
        for(int i=0; i<lst.size(); i++){
            System.out.println(lst.get(i));
        }
    }
}

// ABCDE 所有排列
public class B
{  
    // aa: 待排数据
    // k: 考虑的当前位置(数组下标)
    static void f(char[] aa, int k){
        if(k==aa.length-1){
            System.out.println(String.valueOf(aa));
            return;
        }
       
        for(int i=k; i<aa.length; i++){
            {char t=aa[k]; aa[k]=aa[i]; aa[i]=t;} // 试探
            f(aa,k+1);
            {char t=aa[k]; aa[k]=aa[i]; aa[i]=t;} // 回溯
        }
    }
   
    public static void main(String[] args){
        f("ABC".toCharArray(), 0);
    }
}

【C语言:志愿者】


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>
#include <string>
using namespace std;

void permute1(string prefix, string str)
{
    if (str.length() == 0)
        cout << prefix << endl;
    else
    {
        for (int i = 0; i < str.length(); i++)
            permute1(prefix + str[i], str.substr(0, i) + str.substr(i + 1, str.length()));
    }
}

void permute1(string s)
{
    permute1("", s);
}

void main()
{
    //method1, unable to remove duplicate permutations.
    permute1("ABC");
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <iostream>
#include <string>
#include <cstdio>
using namespace std;

void swap(char* x, char* y)
{
    char tmp;
    tmp = *x;
    *x = *y;
    *y = tmp;
}

/* Function to print permutations of string
This function takes three parameters:
1. String
2. Starting index of the string
3. Ending index of the string. */

void permute(char *a, int i, int n)
{
    int j;
    if (i == n)
        printf("%s\n", a);
    else
    {
        for (j = i; j <= n; j++)
        {
            if (a[i] == a[j] && j != i) //为避免生成重复排列,当不同位置的字符相同时不再交换
                continue;
            swap((a + i), (a + j));
            permute(a, i + 1, n);
            swap((a + i), (a + j)); //backtrack
        }
    }
}

int main42()
{
    //method2
    char a[] = "ABC";
    permute(a, 0, 2);
    return 0;
}


4. 组合
【问题描述】
有重复的字母中求取出m个所有组合

例如: “AAABBCCCCCCDD” 中取3个字母的所有组合
【源代码】
【JAVA:于航】


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
public class A
{
    // m个不同的球中,取n个
    static int f(int m, int n){
        if(n==m) return 1;
        if(n==0) return 1;
        return f(m-1,n) + f(m-1,n-1);
    }
   
    public static void main(String[] args){
        System.out.println(f(5,3));
        System.out.println(f(5,2));
    }
}

// 固定数目的组合问题
// ABCDE 中取3个
public class B
{
    public static void main(String[] args){
        for(char i='A'; i<='E'; i++){
            for(char j=(char)(i+1); j<='E'; j++){
                for(char k=(char)(j+1); k<='E'; k++){
                    System.out.println(""+i+j+k);
                }
            }
        }
    }
}


import java.util.*;

// 递归思路:第1次取什么?
public class C
{
    static List f(String s, int n){
        List lst = new Vector();
        if(n==0){
            lst.add("");
            return lst;
        }
       
        for(int i=0; i<s.length(); i++){
            char x = s.charAt(i);
            List t = f(s.substring(i+1),n-1);
            for(int k=0; k<t.size(); k++){
                lst.add("" + x + t.get(k));
            }
        }
       
        return lst;
    }
   
    public static void main(String[] args){
        List lst = f("ABCDE", 3);
        for(int i=0; i<lst.size(); i++){
            System.out.println(lst.get(i));
        }
    }
}

// "AABBBC" 取3个, 哪些取法?
public class D
{  
    static void work(int[] x){
        for(int i=0; i<x.length; i++){
            for(int k=0; k<x[i]; k++){
                System.out.print((char)('A'+i));
            }
        }
        System.out.println();  
    }
    // data: 不动, 限制条件
    // x: 取法
    // k: 当前考虑的位置
    // goal: 距离目标的剩余名额
    static void f(int[] data, int[] x, int k, int goal){
        if(k==x.length){
            if(goal==0) work(x);
            return;
        }
       
        for(int i=0; i<=Math.min(data[k],goal); i++){
            x[k] = i;
            f(data, x, k+1, goal-i);
        }
        x[k] = 0; // 回溯
    }
   
    public static void main(String[] args)
    {  
        int[] data = {2,3,1};  // 每个元素的最大个数
        int[] x = new int[data.length];  // 每个元素取几个
       
        f(data, x, 0, 3);
    }
}

【C语言:志愿者】


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

    // m个不同的球中,取n个
    int f51(int m, int n)
    {
        if (n == m)
            return 1;
        if (n == 0)
            return 1;
        return f51(m - 1, n) + f51(m - 1, n - 1);
    }

    void main()
    {
        printf("%d    ",f51(5, 3));
        printf("%d    ", f51(5, 2));
   
    }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void main(){
    char arr[10] = { 0 };
    for (char i = 'A'; i <= 'E'; i++)
    {
        for (char j = (char)(i + 1); j <= 'E'; j++){
            for (char k = (char)(j + 1); k <= 'E'; k++){
               
                arr[0] = i;
                arr[1] = j;
                arr[2] = k;
                printf("%s ", arr);
            }
        }
    }
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
#define  _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


typedef struct MyNode
{
    char *pChar;
    struct MyNode *pNext;
}MyNode;

int xx = -1;
MyNode *pHead = NULL;
MyNode *pTime = NULL;
//组合中有相同字母的删除,没有重复字母的保存到新的结构体链表中
MyNode * myPrint(MyNode *pHead)
{
    MyNode *pMyHead = NULL;
    MyNode *pMyTemp = NULL;
    while (pHead != NULL)
    {
        int x = strlen(pHead->pChar);
        int i = 0;
        for ( i = 0; i < x; i++) { char m = *(pHead->pChar + i);
            char *p=strchr(pHead->pChar + i + 1, m);
            if (!p)
            {
                MyNode*p = (MyNode*)malloc(sizeof(MyNode));
                p->pChar = (char*)malloc(1024);
                memset(p->pChar, 0, 10);
                strcpy(p->pChar, pHead->pChar);
                p->pNext = NULL;
                if (pMyHead==NULL)
                {
                    pMyHead = p;
                    pMyTemp = p;
                } else
                {
                    pMyTemp->pNext = p;
                    pMyTemp = p;
                }

                /*printf("%s\n", pHead->pChar);*/
                pHead = pHead->pNext;
                if (!pHead)
                {
                    goto A;
                }
            }
            else
            {
                pHead = pHead->pNext;
                if (!pHead)
                {
                    goto A;
                }
                break;
            }  
           
        }
       
    }
A:;
    return pMyHead;
}
//打印链表(去除链表中字符串重复的)
void myPrintStruct(MyNode* pMyHead)
{
    while (pMyHead)
    {

        char arr[1024] = { 0 };
        strcpy(arr, pMyHead->pChar);
        MyNode* myMySecondHead = pMyHead->pNext;
        while (myMySecondHead)
        {
            int x = strcmp(arr, myMySecondHead->pChar);
            if (x==0)
            {
                break;
            }
            myMySecondHead = myMySecondHead->pNext;
            if (!myMySecondHead)
            {
                printf("%s \n", arr);
            }
        }

        pMyHead = pMyHead->pNext;
    }

}
//递归取出所有符合n的组合
MyNode* f53(char* s, int len, int n)
{
    if (strcmp(s,"DE")==0)
    {
        printf("");
    }
    if (xx == -1)
    {
        xx = n;
    }
   
    if (n <= 0) { MyNode *p = malloc(sizeof(MyNode)); p->pChar = malloc(len);
        memset(p->pChar, 0, 10);
        p->pNext = NULL;

        return p;
    }

    int hn = strlen(s);
    MyNode * kHead = NULL;
    MyNode *KTemp = NULL;
    for (int i = 0; i < hn; i++)
    {

       

        char x = s[i];
       
        char *pc = malloc(len);
        memset(pc, 0, 10);
        strcpy(pc, s+i + 1);

        int yy = strlen(pc);
        if (yy<n-1) { break; } MyNode * pTm = f53(pc, len, n - 1); MyNode*phh = pTm; while (phh != NULL) { int num = strlen(phh->pChar);
            if (num!=xx)
            {
                char arr[1024] = { x };
                strcat(arr, phh->pChar);
                strcpy(phh->pChar, arr);
               
            }  
            phh = phh->pNext;

        }
        if (kHead==NULL)
        {
            kHead = pTm;
            KTemp = pTm;
        }
        else
        {
            if (KTemp != pTm&&kHead != pTm)
            {
                while (KTemp->pNext != NULL)
                {
                    KTemp = KTemp->pNext;
                }
                KTemp->pNext = pTm;
                KTemp = KTemp->pNext;
            }
        }          


    }
   

    return kHead;
}

void main()
{
    char arr[] = "ABCDE";

    pHead=f53(arr, 7, 3);

    MyNode * simplStruct=myPrint(pHead);

    myPrintStruct(simplStruct);
   
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void work(int *x,int len)
{
    for (int i = 0; i < len; i++){
        for (int k = 0; k < x[i]; k++){
            int x = 'A' + i;
            printf("%c",(char)x);
        }
    }
    printf("\n");
}
// data: 不动, 限制条件
// x: 取法
// k: 当前考虑的位置
// goal: 距离目标的剩余名额
void ff(int* data,int len1, int* x,int len2, int k, int goal)
{
    if (k == len2){
        if (goal == 0)
            work(x,len2);
        return;
    }
    int min = data[k] < goal ? data[k] : goal;
    for (int i = 0; i<=min; i++)
    {
        x[k] = i;
        ff(data,len1, x,len2, k + 1, goal - i);
    }
    x[k] = 0; // 回溯
}

void main()
{
    int data[] = { 2, 3, 1 };  // 每个元素的最大个数
 // 每个元素取几个
    int *x=malloc(sizeof(int)* 3);

    ff(data, 3, x,3, 0, 3);
}


5. 扑克序列
【问题描述】
A A 2 2 3 3 4 4, 一共4对扑克牌。请你把它们排成一行。
要求:两个A中间有1张牌,两个2之间有2张牌,两个3之间有3张牌,两个4之间有4张牌。

请填写出所有符合要求的排列中,字典序最小的那个。
例如:22AA3344 比 A2A23344 字典序小。当然,它们都不是满足要求的答案。

【源代码】
【JAVA:于航】


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import java.util.*;

public class TA
{
    static Set set = new TreeSet();
   
    static void test(char[] da)
    {
        String s = new String(da);
       
        if(s.lastIndexOf('A') - s.indexOf('A') != 2) return;
        if(s.lastIndexOf('2') - s.indexOf('2') != 3) return;
        if(s.lastIndexOf('3') - s.indexOf('3') != 4) return;
        if(s.lastIndexOf('4') - s.indexOf('4') != 5) return;
       
        set.add(s);
    }
   
    static void f(char[] da, int k)
    {
        if(k==da.length){
            test(da);
            return;
        }
       
        for(int i=k; i<da.length; i++){
            {char t=da[k]; da[k]=da[i]; da[i]=t;}
            f(da,k+1);
            {char t=da[k]; da[k]=da[i]; da[i]=t;}
        }
    }
   
    public static void main(String[] args)
    {
        char[] da = "AA223344".toCharArray();
        f(da, 0);
       
        for(Object s: set) System.out.println(s);
    }
}

【C语言:志愿者】


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#include <iostream>
#include <cstdlib>  
using namespace std;
char para[8];
int findit(char a, int index)
{
    for (int i = index; i < 8; i++)
    {
        if (para[i] == a)return i;
    }
}
int main6()
{
    char card[8] = { 'A', 'A', '2', '2', '3', '3', '4', '4' };
    for (int i = 0; i < 8; i++)
    {
        para[0] = card[i];
        for (int i2 = 0; i2 < 8; i2++)
        {
            if (i2 == i)continue;
            para[1] = card[i2];
            for (int i3 = 0; i3 < 8; i3++)
            {
                if (i3 == i || i3 == i2)continue;
                para[2] = card[i3];
                for (int i4 = 0; i4 < 8; i4++)
                {
                    if (i4 == i || i4 == i2 || i4 == i3)continue;
                    para[3] = card[i4];
                    for (int i5 = 0; i5 < 8; i5++)
                    {
                        if (i5 == i || i5 == i2 || i5 == i3 || i5 == i4)continue;
                        para[4] = card[i5];
                        for (int i6 = 0; i6 < 8; i6++)
                        {
                            if (i6 == i || i6 == i2 || i6 == i3 || i6 == i4 || i6 == i5)continue;
                            para[5] = card[i6];
                            for (int i7 = 0; i7 < 8; i7++)
                            {
                                if (i7 == i || i7 == i2 || i7 == i3 || i7 == i4 || i7 == i5 || i7 == i6)continue;
                                para[6] = card[i7];
                                for (int i8 = 0; i8 < 8; i8++)
                                {
                                    if (i8 == i || i8 == i2 || i8 == i3 || i8 == i4 || i8 == i5 || i8 == i6 || i8 == i7)continue;
                                    para[7] = card[i8];
                                    int in1 = findit('A', 0);
                                    int in2 = findit('A', in1 + 1);
                                    int in3 = findit('2', 0);
                                    int in4 = findit('2', in3 + 1);
                                    int in5 = findit('3', 0);
                                    int in6 = findit('3', in5 + 1);
                                    int in7 = findit('4', 0);
                                    int in8 = findit('4', in7 + 1);
                                    //cout<<in1<<" "<<in2<<" "<<in3<<" "<<in4<<" "<<in5<<" "<<in6<<" "<<in7<<" "<<in8<<endl;  
                                    if ((in2 - in1) == 2 && (in4 - in3) == 3 && (in6 - in5) == 4 && (in8 - in7) == 5)
                                    {
                                        for (int i = 0; i < 8; i++)
                                        {
                                            cout << para[i] << " ";
                                        }
                                        cout << endl;
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    system("pause");
    return 0;
}


如果您需要更多课程内容和讲解视频,请联系小蓝

Spread the word. Share this post!

Leave Comment

电子邮件地址不会被公开。 必填项已用*标注