题目

Description

将a,b,c,d,e,f,这6个变量排成如图所示的三角形,这
6个变量分别去[1,6]中的不同整数,且使三角形三条边上的变量之和相等。

a
b f
c d e

Input

多组输入 一个1-6之间的数a.

Output

所有以a为顶的三角形,有多组的话按照abcdef排列字典序输出。

Sample Input

1

Sample Output

      1
    4   6
  5   2   3
 
      1
    5   6
  3   4   2
 
      1
    6   5
  2   4   3
 
      1
    6   4
  3   2   5

题解

纯模拟
5 个 for 循环
注意每组解后都有空行
最后一组的最后一个解后没有空行

代码

/*
By:OhYee
Github:OhYee
Blog:http://www.oyohyee.com/
Email:oyohyee@oyohyee.com

かしこいかわいい?
エリーチカ!
要写出来Хорошо的代码哦~
*/
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <string>
#include <iostream>
#include <vector>
#include <list>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <functional>
using namespace std;

const int maxn = 1000;

int a[6];
bool visit[7];
bool flag = false;

bool Do() {
    if(scanf("%d",&a[0]) == EOF)
        return false;
    memset(visit,false,sizeof(visit));
    visit[a[0]] = true;

    for(a[1] = 1;a[1] <= 6;a[1]++) {
        if(visit[a[1]])
            continue;
        visit[a[1]] = true;

        for(a[2] = 1;a[2] <= 6;a[2]++) {
            if(visit[a[2]])
                continue;
            visit[a[2]] = true;

            for(a[3] = 1;a[3] <= 6;a[3]++) {
                if(visit[a[3]])
                    continue;
                visit[a[3]] = true;

                for(a[4] = 1;a[4] <= 6;a[4]++) {
                    if(visit[a[4]])
                        continue;
                    visit[a[4]] = true;

                    for(a[5] = 1;a[5] <= 6;a[5]++) {
                        if(visit[a[5]])
                            continue;
                        visit[a[5]] = true;

                        if((a[1] + a[2] == a[5] + a[4]) && (a[0] + a[1] == a[3] + a[4]) && (a[2] + a[3] == a[0] + a[5])) {
                            if(flag) {
                                printf("\n");
                            } else {
                                flag = true;
                            }
                            printf("     %d\n   %d   %d\n %d   %d   %d\n",a[0],a[1],a[5],a[2],a[3],a[4]);
                        }

                        visit[a[5]] = false;
                    }

                    visit[a[4]] = false;
                }

                visit[a[3]] = false;
            }

            visit[a[2]] = false;
        }

        visit[a[1]] = false;
    }

    return true;
}

int main() {
    while(Do());
    return 0;
}