习题4-4 骰子涂色 UVa253

来源:互联网 发布:mindmap for mac破解 编辑:程序博客网 时间:2024/06/05 08:10
算法竞赛入门经典(第2版)第4章 函数和递归

题4-4子涂色  UVa253

感悟。

1、阅读书中题目,从网站下载英文原题,重点在看输入输出数据与格式。

2、位置摆在1位置的面有6种可能,位置摆在2位置的面有4种可能,共计24种可能。
3、第一种思路,将24种可能枚举列出。
4、第二种思路,找规律,将24种可能用程序算出。
5、不管用哪种思路,先对1摆在1位置的6种可能进行枚举,还真找到了点规律。
6、对面之和为7,只要前三个面序号知道,另三个面就可以算出。
7、1-6对面,2-5对面,3-4对面。
8、再针对2位置的4种可能进行枚举,格式如下:
1位置 俯视顺时针
1    2 3 5 4
2    1 4 6 3
3    1 2 6 5
4    1 5 6 2
5    1 3 6 4
6    2 4 5 3
9、有了思路后,编码很快,稍作调试,通过样例。提交AC,当天搞定,此题就难度而言,相比前几道,可定义为水题。

附上AC代码,运行环境Dev-C++4.9.9.2

#include <stdio.h>
#include <string.h>

char figure[30][10];
void printb(){
    int i,j;
    for(i=1;i<=24;i++){
        for(j=1;j<=6;j++){
            printf("%c",figure[i][j]);
        }
        printf("\n");
    }
}
int main(){
    char source[20];
    char a[10],b[10];
    int i,j,k;
    char second[10][10]={"","2354","1463","1265","1562","1364","2453"};
    
    int rcount,ccount;
    int pos;
    int find;
    while(scanf("%s",source)!=EOF){
        for(i=1;i<=6;i++){
            a[i]=source[i-1];
            b[i]=source[i-1+6];
        }
        rcount=0;       
        for(i=1;i<=6;i++){//位置1面有6种可能
            for(j=0;j<4;j++){//位置2面有4种可能
                ccount=0;
                rcount++;
                ccount++;
                figure[rcount][ccount]=b[i];//1面
                figure[rcount][6]=b[7-i];//6面
                ccount++;
                pos=second[i][j]-'0';
                figure[rcount][ccount]=b[pos];//2面
                figure[rcount][7-ccount]=b[7-pos];//5面
                ccount++;
                pos=second[i][(j+1)%4]-'0';
                figure[rcount][ccount]=b[pos];//3面
                figure[rcount][7-ccount]=b[7-pos];//4面
            }
        }
        find=0;
        for(i=1;i<=24;i++){
            for(j=1;j<=6;j++){
                if(figure[i][j]!=a[j])
                    break;
            }
            if(j==7){
                find=1;
                break;
            }
        }
        //printb();
        if(find==1){
            printf("TRUE\n");
        }else{
            printf("FALSE\n");
        }
    }
    return 0;
}



0 0
原创粉丝点击