zoukankan      html  css  js  c++  java
  • hdu 2209 翻纸牌游戏

    题目链接

    http://acm.hdu.edu.cn/showproblem.php?pid=2209

    这个题难度还可以

    我的思路:有n张牌成第一张牌开始如果是1,则第一张第二张第三张翻转,再看第二张,判断如果是1则第二张第三张第四张翻转,以此下去

    不这样还不可以,还得分两种情况如001 按这种思路是不可以的所以还有一种情况不管如何先翻转第一和第二张牌再如上一种思路。

    我的AC代码

    第一种写法:直接法

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    using namespace std;

    int a[30];
    char str[30];

    int main(void)
    {
    int i,ans;
    int f1,f2;
    while(scanf("%s",str)==1)
    {
    int len=strlen(str);
    int k1,k2;
    f1=0; f2=0;
    for(i=0;i<len;i++)
    a[i]=str[i]-'0';
    a[0]=!a[0];
    a[1]=!a[1];
    k1=1;
    for(i=1;i<len;i++)
    {
    if(a[i-1])
    {
    a[i-1]=!a[i-1];
    a[i]=!a[i];
    a[i+1]=!a[i+1];
    k1++;
    }
    }
    if(a[len-1]==0)
    f1=1;
    k2=0;
    for(i=0;i<len;i++)
    a[i]=str[i]-'0';
    for(i=1;i<len;i++)
    {
    if(a[i-1])
    {
    a[i-1]=!a[i-1];
    a[i]=!a[i];
    a[i+1]=!a[i+1];
    k2++;
    }
    }
    if(a[len-1]==0)
    f2=1;
    if(f1&&f2)
    {
    if(k1>k2)
    printf("%d ",k2);
    else
    printf("%d ",k1);
    }
    else if(f1)
    printf("%d ",k1);
    else if(f2)
    printf("%d ",k2);
    else
    printf("NO ");
    }
    return 0;
    }

    第二种写法:递归

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    using namespace std;

    int a[30];
    char str[30];
    const int inf=1<<30;

    int main(void)
    {
    int dfs(int i,int len,int k);
    int i;
    while(scanf("%s",str)==1)
    {
    int ans=inf;
    int len=strlen(str);
    for(i=0;i<len;i++)
    a[i]=str[i]-'0';
    a[0]=!a[0];
    a[1]=!a[1];
    ans=min(ans,dfs(1,len,1));
    for(i=0;i<len;i++)
    a[i]=str[i]-'0';
    ans=min(ans,dfs(1,len,0));
    if(ans==inf)
    printf("NO ");
    else
    printf("%d ",ans);
    }
    return 0;
    }

    int dfs(int i,int len,int k)
    {
    if(i==len)
    {
    if(a[i-1])
    return inf;
    else
    return k;
    }
    if(a[i-1])
    {
    a[i-1]=!a[i-1];
    a[i]=!a[i];
    a[i+1]=!a[i+1];
    k++;
    }
    dfs(i+1,len,k);
    }

  • 相关阅读:
    jquery.validate ajax提交
    linux权限不够,sh不能用
    几个简单的基类
    类型转换辅助工具类TypeCaseHelper
    linux下修改tomcat内存大小
    Hibernate,JPA注解@OneToMany_Map
    Hibernate,JPA注解@OneToMany_Set
    Hibernate,JPA注解@PrimaryKeyJoinColumn
    Hibernate,JPA注解@OneToOne_JoinColumn
    Hibernate,JPA注解@SecondaryTables
  • 原文地址:https://www.cnblogs.com/liudehao/p/3919290.html
Copyright © 2011-2022 走看看