zoukankan      html  css  js  c++  java
  • zoj 1184

     硬币称重,经典,1.若被判平,左右所有硬币必正常;2.若判轻或判重,对应硬币被判轻-1、重记数+1;3.只有球只被判轻或判重,且次数跟天平不平衡次数相等,该球才能是坏的,否则必然是好的。且>0的是偏重,<0是偏轻.

    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    int main(void)
    {
        int s[15];
        int i,j,t,len1,len2,count=0;
        char str[3][3][13];
        scanf("%d",&t);
        while(t--)
        {
            count=0;/*不平衡的次数*/ 
            for(i=0;i<3 ;i++ )
            scanf("%s%s%s",str[i][0],str[i][1],str[i][2]);
            memset(s,0,sizeof(s));
            for(i=0;i<3;i++)/*找到所有相等的 */
            {
                if(strcmp(str[i][2],"even")==0)
                {
                    len1=strlen(str[i][0]);
                    for(j=0;j<len1;j++)
                        s[(str[i][0][j]-'A')]=1000;/*赋值1000表示正常*/
                    len2=strlen(str[i][1]);
                    for(j=0;j<len2;j++)
                        s[(str[i][1][j]-'A')]=1000;        
                }
            }
            for(i=0;i<3;i++)
            {
                if(strcmp(str[i][2],"up")==0)
                {
                    count++;
                    
                    len1=strlen(str[i][0]);/*up说明左边重 */
                    for(j=0;j<len1;j++)
                        {
                            if(s[(str[i][0][j]-'A')]!=1000)
                            s[(str[i][0][j]-'A')]++;
                        } 
                    len2=strlen(str[i][1]);/*右边比较小 */
                    for(j=0;j<len2;j++)
                        {
                            if(s[(str[i][1][j]-'A')]!=1000)
                            {
                                s[(str[i][1][j]-'A')]--;
                            } 
                                    
                        } 
                }
            }
            for(i=0;i<3;i++)
            {
                if(strcmp(str[i][2],"down")==0)
                {
                    count++;
                    
                    len1=strlen(str[i][0]);/*down说明左边小 */
                    for(j=0;j<len1;j++)
                        {
                            if(s[(str[i][0][j]-'A')]!=1000)
                            {
                                s[(str[i][0][j]-'A')]--;
                            } 
                                    
                        } 
                    len2=strlen(str[i][1]);/*右边左边都正常 */
                    for(j=0;j<len2;j++)
                        {
                            if(s[(str[i][1][j]-'A')]!=1000)
                            {
                                s[(str[i][1][j]-'A')]++;
                            } 
                        }
                    
                }
            }
            for(i=0;i<12;i++)
            {
                if(abs(s[i])==count)/*当不平衡的次数和硬币的问题次数相等时,那么该硬币就是问题硬币*/ 
                {
                    printf("%c is the counterfeit coin and ",i+'A');
                    printf( s[i]<0? "it is light.
    ":"it is heavy.
    ");
                    break;
                }
            }
        }
        
        
        return 0;
    }
    /*
    自己例举的测试实例 
    2
    ABCD EFGH down
    CDEF GHLK even
    AEFD JKCD down
    B A down
    B C even
    D F even
    */
  • 相关阅读:
    sqlserver的排序
    tomcat虚拟目录!
    tomcat虚拟主机配置!
    深度优先搜索算法
    java是什么?
    tomcat服务器jar管理!
    广度优先搜索算法
    简单web服务器
    cascade="alldeleteorphan"时容易出现的一个异常
    Hibernate级联删除的一个错误
  • 原文地址:https://www.cnblogs.com/woshijishu3/p/3619561.html
Copyright © 2011-2022 走看看