标题:请教大佬是否有简便些的方法
只看楼主
grayhooo
Rank: 1
等 级:新手上路
帖 子:30
专家分:0
注 册:2018-10-11
结帖率:100%
已结贴  问题点数:15 回复次数:4 
请教大佬是否有简便些的方法
#include<stdio.h>
int main()
{   
    char str[10];
    while(scanf("%c%c",&str[1],&str[2])!=EOF)
    {
        getchar();
        scanf("%c%c%*c",&str[3],&str[4]);
        scanf("%c%c%*c",&str[5],&str[6]);
        if(str[1]==str[2]||str[3]==str[4]||str[5]==str[6])//判断AC CA形输入为错误输入
        printf("The input is not true!\n");
        if((str[1]==str[3]&&str[1]==str[5])||(str[2]==str[4]&&str[2]==str[6]))
        {
            printf("The input is not true!\n");
        }
        else
        if(str[1]==str[3]&&str[2]==str[4])
        {
            if(str[1]==str[6]&&str[2]!=str[5])
            {
            printf("%c<%c<%c\n",str[2],str[1],str[5]);}
            else
            if(str[1]!=str[6]&&str[2]==str[5])
            printf("%c<%c<%c\n",str[6],str[2],str[1]);
            else   
            printf("The input is not true!\n");
        }
        else
        if(str[1]==str[5]&&str[2]==str[6])
            {
            if(str[1]==str[4]&&str[2]!=str[3])
            {
            printf("%c<%c<%c\n",str[2],str[1],str[3]);
            }
            else
            if(str[1]!=str[4]&&str[2]==str[3])
            printf("%c<%c<%c\n",str[4],str[2],str[1]);
            else   
            printf("The input is not true!\n");
            }
        else
        if(str[3]==str[5]&&str[4]==str[6])
            {
            if(str[3]==str[2]&&str[4]!=str[1])
            {
            printf("%c<%c<%c\n",str[4],str[3],str[1]);
            }
            else
            if(str[3]!=str[2]&&str[4]==str[1])
            printf("%c<%c<%c\n",str[2],str[4],str[3]);
            else   
            printf("The input is not true!\n");
            }
        else
        if(str[1]==str[3])//str1 max
        {
            if(str[2]==str[4]||str[2]==str[6])//str2 min
            {   
                printf("%c<%c<%c\n",str[2],str[4],str[1]);
            }
            else
            if(str[4]==str[2]||str[4]==str[6])//str4 min
            {   
                printf("%c<%c<%c\n",str[4],str[2],str[1]);
            }
            else
            if(str[6]==str[2]||str[6]==str[4])//str6 min
            {   
                printf("%c<%c<%c\n",str[6],str[5],str[1]);
            }
            else
            printf("The input is not true!\n");
        }
        else
        if(str[1]==str[5])//str5 max
        {
            if(str[2]==str[4]||str[2]==str[6]) //str2 min
            {   
                printf("%c<%c<%c\n",str[2],str[3],str[1]);
            }
            else
            if(str[4]==str[2]||str[4]==str[6])//str4 min
            {   
                printf("%c<%c<%c\n",str[4],str[3],str[1]);
            }
            else
            if(str[6]==str[2]||str[6]==str[4])//str6 min
            {   
                printf("%c<%c<%c\n",str[6],str[2],str[1]);
            }
            else
            printf("The input is not true!\n");
        }
        else
        if(str[3]==str[5])//str3 min
        {
            if(str[2]==str[4]||str[2]==str[6])//str2 min
            {   
                printf("%c<%c<%c\n",str[2],str[1],str[3]);
            }
            else
            if(str[4]==str[2]||str[4]==str[6])//str4 min
            {   
                printf("%c<%c<%c\n",str[4],str[6],str[3]);
            }
            else
            if(str[6]==str[2]||str[6]==str[4])//str6 min
            {   
                printf("%c<%c<%c\n",str[6],str[4],str[3]);
            }
            else
            printf("The input is not true!\n");
        }
        else
        {printf("The input is not true!\n");}
    }
    return 0;
}
 


[此贴子已经被作者于2018-10-20 21:54编辑过]

搜索更多相关主题的帖子: str || printf The min 
2018-10-20 18:50
lxk1732942
Rank: 6Rank: 6
等 级:侠之大者
威 望:7
帖 子:450
专家分:425
注 册:2018-9-4
得分:11 
没看懂,为什么例子是字母,不应该是数字吗
2018-10-20 19:51
grayhooo
Rank: 1
等 级:新手上路
帖 子:30
专家分:0
注 册:2018-10-11
得分:0 
我已经找到问题了...但最后改到了120行代码 希望有大佬能给个简便的方法
2018-10-20 21:31
Mr_doge
Rank: 5Rank: 5
等 级:贵宾
威 望:10
帖 子:159
专家分:385
注 册:2018-6-28
得分:0 
首先,题目的ABC代表的是未知的数字,而不是实际的输入,以char形式读取后,得到的是字符ASCII数值,并非实际代表的数字,应声明存储数值的数组而非字符数组,读入的可以用%d读取整数。

将读取数据存入数组后,判断可以丢进另外一个函数,从主函数调用,错误结果就返回代表错误的返回值,符合逻辑要求就返回排序好的数组,主函数接收到代表错误的返回值就打印错误消息,接收到数组就按设定格式打印,可以节省若干重复的打印指令。

至于判断逻辑部分的优化,个人懂的不多,给不了更好的建议。
2018-11-06 18:11
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
假如输入是 AB AB AB 怎么办?合法,但却无法确定C的位置?
假设也没有 AA 这种输入吧
考虑到 ?>? 这个式子只有3*2=6种可能,那么 ?>? ?>? ?>? 也就只有6*6*6=216种可能,因此最快的算法就是查表。也就是先写个程序将216种可能及其结果都列出来,然后作为本程序的内部数据使用。
考虑其它方法的话,对于
??
??
??
若合法,那么左边3个字符中必然有一个重复字符,右边也是,大小关系是:右边的重复字符 < 不是右边的重复字符也不是左边的重复字符 < 左边的重复字符。

程序代码:
// 这题很多细节没讲清,且又无法验证,因此以下代码仅供参考
#include <stdio.h>

int main( void )
{
    for( char x[6]; scanf(" %c %c %c %c %c %c",x+0,x+1,x+2,x+3,x+4,x+5)==6; )
    {
        char middle = x[0] ^ x[2] ^ x[4];
        if( middle<'A' || middle>'C' || middle!=(x[1]^x[3]^x[5]) )
            puts( "The input is not true!" );
        else
        {
            char big = (x[0]+x[2]+x[4]-middle)/2;
            char little = (x[1]+x[3]+x[5]-middle)/2;
            printf( "%c<%c<%c\n", little, middle, big );
        }
    }
}

2018-11-07 09:33



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-490532-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.208311 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved