招商银行信用卡中心研发岗笔试第三题求解


在N个数中找出好数个数,我直接用的穷举法,但测试用例只通过了57%(并没报超过时间限制)。有人ac100%的吗?求解题思路
using namespace std;
 int isnotX(int a) {
 int temp = 0;
 if (a % 10 == 2 || a % 10 == 5 || a % 10 == 6 || a % 10 == 9 || a % 10 == 0 || a % 10 == 1 || a % 10 == 8)
 temp = 0;
 else
 temp = 1;
 if ((a / 10) == 0)
 return temp;
 else
 return temp + isnotX(a / 10);
 }
 bool isbug(int a) {
 while (true) {
 if (a % 10 == 0 || a % 10 == 1 || a % 10 == 8) {
 if (a / 10 == 0)
 return 1;
 else
 a = a / 10;
 }
 else
 return 0;
 }
}
 int main() {
 int N;
 cin >> N;
 int count = 0;
 for (int i = 0; i < N; i++) {
 if ((isnotX(i) == 0) && (isbug(i) == 0))
 {
 //cout << i << " ";
 count++;
 }
}
 cout << count;
 system("pause");
 }
#笔试题目##招商银行信用卡中心#
全部评论
数字转字符串,判断里面有没有3,4,7,有就返回0,再判断里面有没有2,5,6,9 有就返回1,剩下的返回0
点赞 回复 分享
发布于 2018-09-16 21:40
判断里面有没有3.4.7,没有就继续判断有没有2.5.6.9,有的话说明就是好数
点赞 回复 分享
发布于 2018-09-16 23:57
干嘛一定要非要数字操作装逼呢,其实直接字符串一位一位判断是否在有效集合中就可以,注意,还有一个是x不相同,例如881这种就不行
点赞 回复 分享
发布于 2018-09-16 22:46
DEBUG可以追踪下
点赞 回复 分享
发布于 2018-09-16 21:49
数的范围是1到n,直接强行算就可以。
点赞 回复 分享
发布于 2018-09-16 21:45
for (int i = 0; i < N; i++) 这里应该是<=
点赞 回复 分享
发布于 2018-09-16 21:43
<=
点赞 回复 分享
发布于 2018-09-16 21:38
感觉没啥毛病啊 不过我是合在一起做的判断 你有没有看下 输入10的时候 对应的是哪几个个数字啊 然后就是212这种是不是对的
点赞 回复 分享
发布于 2018-09-16 21:34

相关推荐

04-18 15:58
已编辑
门头沟学院 设计
kaoyu:这一看就不是计算机的,怎么还有个排斥洗碗?
点赞 评论 收藏
分享
可以不说话:笔试a了3道半,今天说是挂了😭😭
投递汇丰科技等公司8个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务