• 翻硬币 蓝桥杯


    欢迎访问我的新博客:http://www.milkcu.com/blog/

    原文地址:http://www.milkcu.com/blog/archives/1371171420.html

    标题:翻硬币 - 蓝桥杯

    内容:2013年第四届蓝桥杯全国软件大赛预赛,第8题。

    作者:MilkCu

    题目描述

    题目标题:翻硬币
    小明正在玩一个“翻硬币”的游戏。
    桌上放着排成一排的若干硬币。我们用 * 表示正面,用 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 <xxx>, 不能通过工程设置而省略常用头文件。
    提交时,注意选择所期望的编译器类型。

    分析

    该程序主要包括输入和处理两部分,属于字符串的处理。

    当然这各题有个漏洞,下面的情况无法正常输出
    *o**
    ****
    也就是不同个数为奇数个的时候
    在处理的时候,这种情况不予考虑。

    代码实现

    # include <stdio.h>
    int turn(int a[], int b[])
    {
    	int n = 0;
    	for(int i = 0; a[i] != EOF; i++) {
    		if(a[i] == b[i]) {
    			continue;
    		} else {
    			b[i + 1] = (b[i + 1] == '*' ? 'o' : '*');
    			n++;
    		}
    	}
    	return n;
    }
    int main(void)
    {
    	int a[1000];
    	int b[1000];
    	int c;
    	int i;
    	i = 0;
    	while((c = getchar()) != '\n') {
    		a[i++] = c;
    	}
    	a[i] = EOF;
    	i = 0;
    	while((c = getchar()) != '\n') {
    		b[i++] = c;
    	}
    	b[i] = EOF;
    	printf("%d\n", turn(a, b));
    }

    最后答案

    见上。

    语言扩展

    break语句

    不通过循环头部或尾部的条件测试跳出循环,有时是挺方便的。break语句可用于从for、while与do-while等循环中提前退出,就如同从switch语句中提前退出一样。

    continue语句

    continue语句用于是for、while或do-while语句开始下一次循环的执行。在while和do-while语句中,continue语句的执行意味着立即执行测试部分;在for循环中,则意味着使控制转移到递增循环变量部分。continue语句只用于循环语句,不用于switch语句。

    如果不使用continue语句,则可能需要把测试颠倒过来或者缩进另一层循环,这样做会使程序的嵌套更深。

    参考资料

    • 《C程序设计语言》,Kernighan,Ritchie,2版,64页;

    (全文完)

  • 相关阅读:
    06-按钮Button
    05-文本视图TextView
    02-运行配置AndroidManifest.xml
    01-编译配置文件build.gradle详解
    jquery获取焦点和失去焦点
    Liunx下安装Oracle11g时Oracle Grid安装包下载向导
    配置虚拟机上的RedHat6 Linux系统的网络(选择的是仅主机模式)
    Redhat镜像-RHEL-官方镜像下载大全
    在VMware中创建一个新的虚拟机 ,安装Linux4.X系统 ,之后在此基础上安装openfiler(网络存储管理实用程序)
    Oracle18C安装后首次创建数据库并用sql developer 创建连接和用户
  • 原文地址:https://www.cnblogs.com/milkcu/p/3808879.html
Copyright © 2020-2023  润新知