【每日例题】蓝桥杯 c++ 手机尾数

发布时间 2023-11-10 16:28:53作者: 山远尽成云

手机尾数

题目

30年的改革开放,给中国带来了翻天覆地的变化。2011全年中国手机产量约为11.72亿部。手机已经成为百姓的基本日用品!
给手机选个好听又好记的号码可能是许多人的心愿。但号源有限,只能辅以有偿选号的方法了。
这个程序的目的就是:根据给定的手机尾号(4位),按照—定的规则来打分。其规则如下:
1.如果出现连号,不管升序还是降序,都加5分。例如:5678,4321都满足加分标准。
2.前三个数字相同,或后三个数字相同,都加3分。例如:4888,6665,7777都满足加分的标准。注意:7777因为满足这条标准两次,所以这条规则给它加了6分。
3.符合AABB或者ABAB模式的加1分。例如:2255,3939,7777都符台这个模式,所以都被加分。注意:7777因为满足这条标准两次,所以这条标准给它加了2分。
4.含有:6,8,9中任何—个数字,每出现一次加1分。例如:4326,6875,9918都符合加分标准。其中,6875被加2分;9918被加3分。
尾号最终得分就是每条标准的加分总和!
要求程序从标佳输入接收数据,在标准输出上输出结果。

蓝桥杯 手机尾数

思路分析

  1. 题目要求多个输入,使用for循环即可。
  2. 有题目可知,所有加分规则都在针对四位数的每一位,为了方便处理,我们将手机尾号的四位数进行数位拆分
  3. 第一条连号规则使用if进行条件筛选即可
  4. 第二条与第三条规则都需要分开不同情况进行if判断
  5. 第四条规则可以通过调用函数解决

总而言之:该题是入门题目,只需要额外注意数位拆分还有不同规则加不同分即可。

代码

 

#include <iostream>
using namespace std;

int fun(int x)
{
    if((x==6)||(x==8)||(x==9))
        return 1;
    else
        return 0;
}

int main()
{
    int n;
    int num[100];//手机尾号数组
    int fenshu[100]={0};//分数
    int a,b,c,d;//手机尾号的四个数字
    cin>>n;
    for(int i=0;i<n;i++)
    {
        cin>>num[i];
    }
    for(int j=0;j<n;j++)
    {
        a=num[j]/1000;//第一位
        b=num[j]/100%10;//第二位
        c=num[j]%100/10;//第三位
        d=num[j]%10;//第四位
        //连号
        if(((a+1==b)&&(b+1==c)&&(c+1==d))||((a-1==b)&&(b-1==c)&&(c-1==d)))
        {
            fenshu[j]+=5;
        }
        //前三个数字相同
        if((a==b)&&(b==c))
        {
            fenshu[j]+=3;
        }
        //后三个数字相同
        if((b==c)&&(c==d))
        {
            fenshu[j]+=3;
        }
        //符合AABB关系
        if((a==b)&&(c==d))
        {
            fenshu[j]++;
        }
        //符合ABAB关系
        if((a==c)&&(b==d))
        {
            fenshu[j]++;
        }
        //出现6,8,9数字
        fenshu[j]+=fun(a);
        fenshu[j]+=fun(b);
        fenshu[j]+=fun(c);
        fenshu[j]+=fun(d);
    }
    for(int i=0;i<n;i++)
    {
        cout<<fenshu[i]<<endl;
    }
    return 0;
}