手机尾数
题目
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; }
标签:7777,int,c++,尾号,蓝桥,标准,规则,手机,例题 From: https://www.cnblogs.com/hcrzhi/p/17824409.html