【每日例题】蓝桥杯 c++ 手机尾数
手机尾数
题目
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分。
尾号最终得分就是每条标准的加分总和!
要求程序从标佳输入接收数据,在标准输出上输出结果。
思路分析
- 题目要求多个输入,使用for循环即可。
- 有题目可知,所有加分规则都在针对四位数的每一位,为了方便处理,我们将手机尾号的四位数进行数位拆分
- 第一条连号规则使用if进行条件筛选即可
- 第二条与第三条规则都需要分开不同情况进行if判断
- 第四条规则可以通过调用函数解决
总而言之:该题是入门题目,只需要额外注意数位拆分还有不同规则加不同分即可。
代码
#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;
}

浙公网安备 33010602011771号