吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 8606|回复: 52
收起左侧

[C&C++ 转载] 最近在学C,看到这个例子感觉挺不错的。拿出来分享

  [复制链接]
Aug.LuKai 发表于 2018-9-17 21:36
刚学不久,一些写法可能不是最优,还有代码书写看起来可能不规范,希望大家能指出来!


推理题.png =》这个是原题
[C] 纯文本查看 复制代码
#include "stdafx.h"
#include <math.h>
 
/*
 
1.这道题的答案是
A.A B.B C.C D.D
2.第5题的答案是
A.C B.D C.A D.B 
3.以下选项中哪一题的答案与其他三项不同
A.第3题 B.第6题 C.第2题 D.第4题
4.以下选项中哪两题的答案相同
A.第1,5题 B.第2,7题 C.第1,9题 D.第6,10题
5.以下选项中哪一题的答案与本题相同
A.第8题 B.第4题 C.第9题 D.第7题
6.以下选项中哪两题的答案与第8题相同
A.第2,4题 B.第1,6题 C.第3,10题 D.第5,9题
7.在此十道题中,被选择次数最少的选项字母为
A.C B.B C.A D.D
8.以下选项中哪一题的答案与第1题的答案在字母表中不相邻
A.第7题 B.第5题 C.第2题 D.第10题
9.已知“第1题与第6题的答案相同”与“第X题与第5题的答案相同”的真假性相反,那么X为
A.第6题 B.第10题 C.第2题 D.第9题
10.在此十道题中,ABCD四个字母中出现的次数最多者与最少者的差为
A.3 B.2 C.4 D.1

 */
 
int MinTimes(int a[],int n)
{
    int i,abcd[4]={0};
    for(i=0;i<n;i++) abcd[a[1+i]]++;
 
    int min=abcd[0],j=0;
    for(i=0;i<4;i++)
    {
        if(min>abcd[i]) {min=abcd[i]; j=i;}
    }
    return j;
}
 
int main(int argc, char* argv[])
{   
    int i;
    int a[11];
        for(a[1]=0;a[1]<4;a[1]++)
            for(a[2]=0;a[2]<4;a[2]++)
                for(a[3]=0;a[3]<4;a[3]++)
                    for(a[4]=0;a[4]<4;a[4]++)
                        for(a[5]=0;a[5]<4;a[5]++)
                            for(a[6]=0;a[6]<4;a[6]++)
                                for(a[7]=0;a[7]<4;a[7]++)
                                    for(a[8]=0;a[8]<4;a[8]++)
                                        for(a[9]=0;a[9]<4;a[9]++)
                                            for(a[10]=0;a[10]<4;a[10]++)
    {   
        //  2.第5题的答案是 A.C B.D C.A D.B 
        if(a[2]==0 &&a[5]==2 )           {;} 
        else if (a[2]==1 &&a[5]==3)     {;} 
        else if (a[2]==2 &&a[5]==0)      {;}
        else if (a[2]==3 &&a[5]==1)     {;} 
        else    continue;  //下一个候选者
 
       //3.以下选项中哪一题的答案与其他三项不同 A.第3题 B.第6题 C.第2题 D.第4题
        if(a[3]==0 && a[3]!=a[6] && a[6]==a[2] && a[2]==a[4]) {;}
        else  if(a[3]==1 && a[6]!=a[3] && a[3]==a[2] && a[2]==a[4]) {;}
        else if(a[3]==2 && a[2]!=a[6] && a[6]==a[3] && a[3]==a[4]) {;}
        else if(a[3]==3 && a[4]!=a[6] && a[6]==a[2] && a[2]==a[3] ) {;}    
        else   continue;
         
        //4.以下选项中哪两题的答案相同 A.第1,5题 B.第2,7题 C.第1,9题 D.第6,10题
        if(a[4]==0 && a[1]==a[5]) {;}
        else if(a[4]==1 && a[2]==a[7]) {;}
        else if(a[4]==2 && a[1]==a[9]) {;}
        else if(a[4]==3 && a[6]==a[10]) {;}
        else continue;
         
        //5.以下选项中哪一题的答案与本题相同 A.第8题 B.第4题 C.第9题 D.第7题
 
        if(a[5]==0 && a[8]==a[5]) {;}
        else if(a[5]==1 && a[4]==a[5]) {;}
        else if(a[5]==2 && a[9]==a[5]) {;}
        else if(a[5]==3 && a[7]==a[5]) {;}
        else continue;
 
        //6.以下选项中哪两题的答案与第8题相同A.第2,4题 B.第1,6题 C.第3,10题 D.第5,9题
        if(a[6]==0 && a[8]==a[2] && a[8]==a[4] ) {;}
        else if(a[6]==1 && a[8]==a[1] && a[8]==a[6]) {;}
        else if(a[6]==2 && a[8]==a[3] && a[8]==a[10]) {;}
        else if(a[6]==3 && a[8]==a[5] && a[8]==a[9]) {;}
        else continue;
 
        //8.以下选项中哪一题的答案与第1题的答案在字母表中不相邻 A.第7题 B.第5题 C.第2题 D.第10题
        if(a[8]==0 &&  (abs(a[7]-a[1])!=1) && (abs(a[5]-a[1])==1) && (abs(a[2]-a[1])==1) && (abs(a[10]-a[1])==1) ) {;}
        else if(a[8]==1 &&  (abs(a[5]-a[1])!=1) && (abs(a[7]-a[1])==1) && (abs(a[2]-a[1])==1) && (abs(a[10]-a[1])==1) ) {;}
        else if(a[8]==2 &&  (abs(a[2]-a[1])!=1) && (abs(a[7]-a[1])==1) && (abs(a[5]-a[1])==1) && (abs(a[10]-a[1])==1) ) {;}
        else if(a[8]==3 &&  (abs(a[10]-a[1])!=1) && (abs(a[7]-a[1])==1) && (abs(a[5]-a[1])==1) && (abs(a[2]-a[1])==1) ) {;}
        else continue;
 
        //9.已知“第1题与第6题的答案相同”与“第X题与第5题的答案相同”的真假性相反,那么X为A.第6题 B.第10题 C.第2题 D.第9题
        if(a[9]==0 && ((a[1]==a[6]) ^ (a[6]==a[5] ) ) ) {;}
        else if(a[9]==1 && ((a[1]==a[6]) ^ (a[10]==a[5] ) ) ) {;}
        else if(a[9]==2 && ((a[1]==a[6]) ^ (a[2]==a[5] ) ) ) {;}
        else if(a[9]==3 && ((a[1]==a[6]) ^ (a[9]==a[5] ) ) ) {;}
        else continue;
        //7. 
        if(a[7]==0 && MinTimes(a,10)==2){;}
        else if(a[7]==1 && MinTimes(a,10)==1){;}
        else if(a[7]==2 && MinTimes(a,10)==0){;}
        else if(a[7]==3 && MinTimes(a,10)==3){;}
        else continue;
 
        //10关不用了
 
 
        printf("\n本试题的答案为");
 
            for(i=1;i<=10;i++) printf(" %c",a[i]+'a');
    }
 
 
 
 
    return 0;
}
答案.png =》这个是运行的结果!!

免费评分

参与人数 7吾爱币 +8 热心值 +6 收起 理由
一步一念一顾 + 1 + 1 这题牛批到不行啊,吃不住吃不住
4-SR + 1 + 1 用心讨论,共获提升!
wuliwuliwuli + 1 + 1 用心讨论,共获提升!
食髓知味苦 + 1 我很赞同!
小小学生 + 1 + 1 真的66666啊
luoluoovo + 2 + 1 用心讨论,共获提升!
quandu + 1 + 1 之前我也写过这个23333,加油0.0

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| Aug.LuKai 发表于 2018-9-18 12:42
锋范fast 发表于 2018-9-17 22:41
这个for循环是不是少了好多中括号????

你可以都打上呀,便于理解,但阅读性可能会差点
 楼主| Aug.LuKai 发表于 2018-9-18 22:38
angel8327 发表于 2018-9-18 13:17
学习一下~这排版看起来好舒服~~

我也是按照我的感觉来排的,不知道是不是规范的。
xp9477 发表于 2018-9-17 22:05
请叫我大魔王 发表于 2018-9-17 22:20
用VC++6.0不行的吗
QQ截图20180917221927.png
小小学生 发表于 2018-9-17 22:22
6的不行啊
KKL 发表于 2018-9-17 22:25
这个题叼的不行啊
 楼主| Aug.LuKai 发表于 2018-9-17 22:28

我就是用6.0写的,是可以运行的,你看我贴的最后一张图。
onlyifx 发表于 2018-9-17 22:32
先收藏,洗完澡来操作
锋范fast 发表于 2018-9-17 22:41
这个for循环是不是少了好多中括号????
静一静 发表于 2018-9-17 22:41
支持楼主,加油
徒想er 发表于 2018-9-17 22:45
天呐,完全懵逼,一点儿头绪都没有
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-16 17:40

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表