zoukankan      html  css  js  c++  java
  • 翻硬币

    小明正在玩一个“翻硬币”的游戏。

    桌上放着排成一排的若干硬币。我们用 * 表示正面,用 o 表示反面(是小写字母,不是零)。

    比如,可能情形是:**oo***oooo

    如果同时翻转左边的两个硬币,则变为:oooo***oooo

    现在小明的问题是:如果已知了初始状态和要达到的目标状态,每次只能同时翻转相邻的两个硬币,那么对特定的局面,最少要翻动多少次呢?

    我们约定:把翻动相邻的两个硬币叫做一步操作,那么要求:

    程序输入:

    两行等长的字符串,分别表示初始状态和要达到的目标状态。每行的长度<1000

    程序输出:

    一个整数,表示最小操作步数

    例如:

    用户输入:

    **********
    o****o****
    

    程序应该输出:

    5
    

    再例如:

    用户输入:

    *o**o***o***
    *o***o**o***
    

    程序应该输出:

    1
    

    资源约定:

    峰值内存消耗 < 64M

    CPU消耗 < 1000ms

    请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。

    所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。

    注意: main函数需要返回0

    注意: 只使用ANSI C/ANSI C++ 标准,不要调用依赖于编译环境或操作系统的特殊函数。

    注意: 所有依赖的函数必须明确地在源文件中 #include , 不能通过工程设置而省略常用头文件。

    提交时,注意选择所期望的编译器类型。

    代码:

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    using namespace std;
    char s[1001];
    int a[2][1001];
    int main() {
        int len;
        for(int i = 0;i < 2;i ++) {
            scanf("%s",s);
            len = strlen(s);
            for(int j = 0;j < len;j ++) {
                if(s[j] == '*') a[i][j] = 1;
                else a[i][j] = -1;
            }
        }
        int c = 0;
        for(int i = 0;i < len;i ++) {
            if(a[0][i] != a[1][i]) {
                c ++;
                a[0][i] *= -1;
                a[0][i + 1] *= -1;
            }
        }
        printf("%d",c);
    }
    import java.util.Scanner;
    
    public class Main {
        private static Scanner sc = new Scanner(System.in);
        private static char reverse(char ch) {
            if(ch == '*') return 'o';
            else return '*';
        }
        public static void main(String[] args) {
            String s1,s2;
            StringBuilder s;
            s1 = sc.next();
            s2 = sc.next();
            int c = 0;
            s = new StringBuilder(s1);
            for(int i = 0;i < s.length();i ++) {
                if(s.charAt(i) != s2.charAt(i)) {
                    s.setCharAt(i,reverse(s.charAt(i)));
                    if(i + 1 < s.length()) s.setCharAt(i + 1, reverse(s.charAt(i + 1)));
                    c ++;
                }
            }
            System.out.println(c);
        }
    
    }
  • 相关阅读:
    ADO.NET(一)数据库连接串的几种写法
    C#事件Event--猫捉老鼠
    事件
    委托
    C# .Net List<T>中Remove()、RemoveAt()、RemoveRange()、RemoveAll()的区别,List<T>删除汇总
    上传下载
    验证数据
    RSADemo2
    随机数
    二维码生成类
  • 原文地址:https://www.cnblogs.com/8023spz/p/10300260.html
Copyright © 2011-2022 走看看