• POJ1013


    大致题意:

    有一打(12枚)硬币,其中有且仅有1枚假币,11枚真币

    用A~L作为各个硬币的代号

    假币可能比真币略轻,也可能略重

    现在利用天枰,根据Input输入的3次称量,找出假币,并输出假币是轻还是重。

    #include<stdio.h>
    #include<string.h>
    #include<math.h>
    #include<stdlib.h>
    int Abs(int a)
    {
        return a>0?a:(-a);
    }
    int vis[15];
    int main()
    {
        int i,j,T,k;int ans;
        char str1[10],str2[10],str3[10];
        scanf("%d",&T);
        getchar();
        while(T--)
        {
            ans=0;
            for(i=1;i<=12;i++)
            {
                vis[i]=10;
            }
            for(k=1;k<=3;k++)
            {
                //getchar();
                memset(str1,0,sizeof(str1));
                memset(str2,0,sizeof(str2));
                memset(str3,0,sizeof(str3));
                scanf("%s %s %s",str1,str2,str3);
                if(strcmp(str3,"even")==0)
                {
                    for(i=0;str1[i]!='\0';i++)
                        vis[str1[i]-'A'+1]=0;
                    for(i=0;str2[i]!='\0';i++)
                        vis[str2[i]-'A'+1]=0;
                }                
                else if(strcmp(str3,"up")==0)
                {
                    for(i=0;str1[i]!='\0';i++)
                    if(vis[str1[i]-'A'+1]!=0)
                        vis[str1[i]-'A'+1]++;//左边重假币 
                    for(i=0;str2[i]!='\0';i++)
                    if(vis[str2[i]-'A'+1]!=0)
                        vis[str2[i]-'A'+1]--;//右边轻假币 
                }
                else
                {
                    for(i=0;str1[i]!='\0';i++)
                    if(vis[str1[i]-'A'+1]!=0)
                        vis[str1[i]-'A'+1]--;//左边轻假币 
                    for(i=0;str2[i]!='\0';i++)
                    if(vis[str2[i]-'A'+1]!=0)
                        vis[str2[i]-'A'+1]++;//右边重假币
                }
                ans=0;
                for(i=1;i<=12;i++)
                {
                    if(Abs(vis[i]-10)>Abs(ans)&&vis[i]!=0)
                        {
                            ans=vis[i]-10;
                            j=i;
                           // printf("%d\n",j);
                        }
                }
            }
            if(ans>0)
                printf("%c is the counterfeit coin and it is heavy.\n",j+64);
            else
                printf("%c is the counterfeit coin and it is light.\n",j+64);
        }
        system("pause");
        return 0;
    }
                
             
             
                
            
        
        
    
  • 相关阅读:
    sql 查出一张表中重复的所有记录数据
    几种常见SQL分页方式效率比较
    Redis命令参考之复制(Replication)
    Redis-benchmark使用总结
    redis压力测试详解
    c#:ThreadPool实现并行分析,并实现线程同步结束
    C#多线程学习 之 线程池[ThreadPool]
    [C#基础]ref和out的区别
    C#:ref和out的联系及区别。
    生产环境中使用Docker Swarm的一些建议
  • 原文地址:https://www.cnblogs.com/hxsyl/p/2610654.html
Copyright © 2020-2023  润新知