zoukankan      html  css  js  c++  java
  • poj 1013 Counterfeit Dollar(模拟)

    恩,以前做过的一个智力题,本以为可以很简单解决,没想到却拖了好几天也没解决,总的来说是没理清思路,没想好怎么保存已经确定的状态,最后才考了一下网上代码才解决,其实开两个数组就行了,只是当时没想到,总是想着能少开个数组就少开个,节约空间,但是这样会浪费时间,其实结果是一样。

    代码:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int w[20];//存储现态;
    int f[20];//存储上一个状态
    
    int main()
    {
        int len,cas,i,j;
        char left[20],right[20],res[10];
    
        scanf("%d",&cas);
        getchar();
        while(cas--)
        {
            memset(w,-1,sizeof(w));
            for(j=1;j<=3;j++)
            {
                scanf("%s%s%s",left,right,res);
                getchar();
                len=strlen(left);
                memset(f,0,sizeof(f));
                if (strcmp(res,"even")==0)//两边相等时,每一个硬币都是真的。
                {
                    for(i=0;i<len;i++)
                    w[left[i]-'A']=w[right[i]-'A']=0;
                }
                else if(strcmp(res,"up")==0)//up时,左边重右边轻
                {
                    memcpy(f,w,sizeof(w));
                    memset(w,0,sizeof(w));
                    for(i=0;i<len;i++)
                    {
                        w[left[i]-'A']=2;
                        w[right[i]-'A']=1;
                    }
                    for(i=0;i<16;i++)
                    if(f[i]>=0 && w[i] != f[i])
                    w[i]=0;
                }
                else//down时左边轻右边重
                {
                    memcpy(f,w,sizeof(w));
                    memset(w,0,sizeof(w));
                    for(i=0;i<len;i++)
                    {
                        w[left[i]-'A']=1;
                        w[right[i]-'A']=2;
                    }
                    for(i=0;i<16;i++)
                    if(f[i]>=0 && w[i] != f[i])
                    w[i]=0;
                }
            }
            for(i=0;i<16;i++)
            if(w[i]>0)
            printf("%c is the counterfeit coin and it is %s.\n",i+'A',w[i]==1?"light":"heavy");
        }
        return 0;
    }
  • 相关阅读:
    SQL 中文排序方式
    ASP.NET公有六种验证控件
    CustomValidator的使用方法
    c# 获取网页源码
    asp.net mvc 从客户端中检测到有潜在危险的 Request.Form 值的解决方法
    C#上传文件转字节流形式
    byte数组转换成文件保存到本地
    检测到有潜在危险的Request.Form值
    字节数组生成图片
    Edit Distance (编辑距离) .NET 实现
  • 原文地址:https://www.cnblogs.com/misty1/p/2482208.html
Copyright © 2011-2022 走看看