• 翻硬币


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

    桌上放着排成一排的若干硬币。我们用 * 表示正面,用 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);
        }
    
    }
  • 相关阅读:
    实验楼挑战赛(1)-实现不可修改字典
    python django前端界面实现数据库数据excel导出
    python2中range和xrange的异同
    python的json模块的dumps,loads,dump,load方法介绍
    ajax500错误
    伪元素小tips
    使用css3制作蚂蚁线
    chardet坑——比蜗牛还慢
    Flask的socket.error:10053
    chrome插件开发-消息机制中的bug与解决方案
  • 原文地址:https://www.cnblogs.com/8023spz/p/10300260.html
Copyright © 2020-2023  润新知