zoukankan      html  css  js  c++  java
  • 9.3noip模拟赛第一题卡片

    卡片 (card)
    【题目描述】
    lrb 喜欢玩卡牌。他手上现在有n张牌,每张牌的颜色为红绿蓝中的一种。现在他有两种
    操作。一是可以将两张任意位置的不同色的牌换成一张第三种颜色的牌;二是可以将任意位
    置的两张相同颜色的牌换成一张该颜色的牌。两个操作后都可以将生成的牌放到任意位置。
    现在他想知道,最后一张牌可能是什么颜色的。
    【输入描述】
    第一入一个n,表示卡牌数量。
    第二行输入一个由’B’,’G’,’R’组成的长度为n的字符串,分别表示卡牌的颜色为蓝色、绿
    色、红色中的一种。
    【输出描述】
    输出’B’,’G’,’R’中的若干个字母,按字典序输出。代表可能的最后一张牌的颜色。
    【样例】
    输入 1 输出 1
    2
    RB
    G
    输入 2 输出 2
    3
    GRG
    BR
    输入 3 输出 3
    4
    BBBB
    B
    【数据范围】
    对于100%的数据,n ≤ 200

    思路:用if各种特殊判断

    #include<cstdio>
    using namespace std;
    int n,a,b,c;
    int a1,b1,c1;
    char ch[210];
    int main(){
      scanf("%d",&n);
      scanf("%s",ch);
      for(int i=0;i<n;i++)
      switch(ch[i]){
        case 'B':a++;break;
        case 'G':b++;break;
        case 'R':c++;break;
      }
      if(a&&!b&&!c){//如果只存在B,则只输B
        printf("B");
        return 0;
      }
      if(!a&&b&&!c){//同
        printf("G");
        return 0;
      }
      if(!a&&!b&&c){//同
        printf("R");
        return 0;
      }
      if(n==2){ //如果有两个且不同
        if (!a) printf("B");
        if (!b) printf("G");
        if (!c) printf("R");
        return 0;
      }
      if(a==n-1){//可论证
        printf("GR");
        return 0;
      }
      if(b==n-1){
        printf("BR");
        return 0;
      }
      if(c==n-1){
        printf("BG");
        return 0;
      }
      printf("BGR");
      return 0;
    }

    论证:

    如果有n-1个B,另一个为R,

    1、消去B直到剩下一个B,BR为G

    2、一个B和R成G,在消去B,BG为R

    3、因为同一次只能出现一个R或G,所以永远不会全都是B

    所以答案为RG

    同理的另外两个

  • 相关阅读:
    实验2四则运算结对
    作业5 四则运算 测试与封装 5.1
    0909我对编译的看法
    P2602 [ZJOI2010]数字计数(递推+数位dp写法)
    模数的世界[数论]
    P2312[秦九韶+读入取模+哈希解方程]
    第三章 Python 的容器: 列表、元组、字典与集合
    第二章 Python 基本元素:数字、字符串、变量
    第一章 Python 之初探
    第四章 Python 外壳 :代码结构
  • 原文地址:https://www.cnblogs.com/linzeli/p/7471391.html
Copyright © 2011-2022 走看看