10.A、B、C、D、E、F、G、H、I、J 共10名学生有可能参加本次计算机竞赛,也可能不参加。因为某种原因,他们是否参赛受到下列条件的约束:

package s5;

public class test10 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        /*
         * A、B、C、D、E、F、G、H、I、J 共10名学生有可能参加本次计算机竞赛,也可能不参加。因为某种原因,他们是否参赛受到下列条件的约束:
         * 1. 如果A参加,B也参加; 2. 如果C不参加,D也不参加; 3. A和C中只能有一个人参加; 4. B和D中有且仅有一个人参加; 5.
         * D、E、F、G、H 中至少有2人参加; 6. C和G或者都参加,或者都不参加; 7. C、E、G、I中至多只能2人参加 8.
         * 如果E参加,那么F和G也都参加。 9. 如果F参加,G、H就不能参加 10. 如果I、J都不参加,H必须参加
         * 请编程根据这些条件判断这10名同学中参赛者名单。如果有多种可能,则输出所有的可能情况。
         * 每种情况占一行。参赛同学按字母升序排列,用空格分隔。
         * 比如: C D G J 就是一种可能的情况。
         * 要求考生把所有类写在一个文件中。调试好后,存入与考生文件夹下对应题号文件夹中的“解答.txt”
         * 中即可。相关的工程文件不要拷入。请不要使用package语句。
         */

        for(int a=0;a<2;a++)
            for(int b=0;b<2;b++)
                if((a==1&&b==1)||(a==0&&b==1)||(a==0&&b==0))//如果A参加,B也参加;                    
                for(int c=0;c<2;c++)    
                    if(a+c<=1)// A和C中只能有一个人参加;
                    for(int d=0;d<2;d++)
                        if((c==0&&d==0)||(c==1&&d==1)||(c==1&&d==0))// 如果C不参加,D也不参加;        
                            if(b+d==1)//B和D中有且仅有一个人参加;
                        for(int e=0;e<2;e++)
                            for(int f=0;f<2;f++)
                                for(int g=0;g<2;g++)
                                    if(c+g==2||c+g==0)//C和G或者都参加,或者都不参加;
                                        if(e+f+g==3||(e==0&&f==0&&g==0)||(e==0&&f==0&&g==1)||(e==0&&f==1&&g==0)||(e==0&&f==1&&g==1))//如果E参加,那么F和G也都参加。
                                    for(int h=0;h<2;h++)
                                        if(d+e+f+g+h>=2)// D、E、F、G、H 中至少有2人参加;
                                            if((f==1&&g==0&&h==0)||(f==0&&g==0&&h==0)||(f==0&&g==0&&h==1)||(f==0&&g==1&&h==0)||(f==0&&g==1&&h==1))//如果F参加,G、H就不能参加
                                        for(int i=0;i<2;i++)
                                            if(c+e+g+i<=2)//C、E、G、I中至多只能2人参加  
                                            for(int j=0;j<2;j++)
                                                if((i==0&&j==0&&h==1)||(i==1&&j==0&&h==0)||(i==1&&j==0&&h==1)||(i==1&&j==1&&h==0)||(i==1&&j==1&&h==1)||(i==0&&j==1&&h==0)||(i==0&&j==1&&h==1)){//如果I、J都不参加,H必须参加
                                                    //String s="";
                                                    if(a==1){
                                                        System.out.print('A');                                                                
                                                    }    
                                                    if(b==1){
                                                        System.out.print('B');                                                                
                                                    }
                                                    if(c==1){
                                                        System.out.print('C');                                                                
                                                    }
                                                    if(d==1){
                                                        System.out.print('D');                                                                
                                                    }
                                                    if(e==1){
                                                        System.out.print('E');                                                                
                                                    }
                                                    if(f==1){
                                                        System.out.print('F');                                                                
                                                    }
                                                    if(g==1){
                                                        System.out.print('G');                                                                
                                                    }
                                                    if(h==1){
                                                        System.out.print('H');                                                                
                                                    }
                                                    if(i==1){
                                                        System.out.print('I');                                                                
                                                    }
                                                    if(j==1){
                                                        System.out.print('J');                                                                
                                                    }
                                                    System.out.println();
                                                            
                                                    
                                                }        
    }

}

下面是用C语言创建以A,B,C,D,E,F,G,H,I,J为节点的二叉树的代码: ```c #include <stdio.h> #include <stdlib.h> // 定义二叉树节点结构体 typedef struct TreeNode { char val; struct TreeNode *left; struct TreeNode *right; } TreeNode; // 创建二叉树 TreeNode* createTree() { // 创建节点A TreeNode *A = (TreeNode*)malloc(sizeof(TreeNode)); A->val = 'A'; // 创建节点B TreeNode *B = (TreeNode*)malloc(sizeof(TreeNode)); B->val = 'B'; // 创建节点C TreeNode *C = (TreeNode*)malloc(sizeof(TreeNode)); C->val = 'C'; // 创建节点D TreeNode *D = (TreeNode*)malloc(sizeof(TreeNode)); D->val = 'D'; // 创建节点E TreeNode *E = (TreeNode*)malloc(sizeof(TreeNode)); E->val = 'E'; // 创建节点F TreeNode *F = (TreeNode*)malloc(sizeof(TreeNode)); F->val = 'F'; // 创建节点G TreeNode *G = (TreeNode*)malloc(sizeof(TreeNode)); G->val = 'G'; // 创建节点H TreeNode *H = (TreeNode*)malloc(sizeof(TreeNode)); H->val = 'H'; // 创建节点I TreeNode *I = (TreeNode*)malloc(sizeof(TreeNode)); I->val = 'I'; // 创建节点J TreeNode *J = (TreeNode*)malloc(sizeof(TreeNode)); J->val = 'J'; // 构建二叉树 A->left = B; A->right = C; B->left = D; B->right = E; C->left = F; C->right = G; D->left = H; D->right = I; E->left = J; E->right = NULL; F->left = NULL; F->right = NULL; G->left = NULL; G->right = NULL; H->left = NULL; H->right = NULL; I->left = NULL; I->right = NULL; J->left = NULL; J->right = NULL; return A; } // 前序遍历二叉树 void preorderTraversal(TreeNode *root) { if (root == NULL) { return; } printf("%c ", root->val); preorderTraversal(root->left); preorderTraversal(root->right); } int main() { // 创建二叉树 TreeNode *root = createTree(); // 前序遍历二叉树 printf("前序遍历结果为:"); preorderTraversal(root); return 0; } ``` 输出结果为: ``` 前序遍历结果为:A B D H I E J C F G ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值