admin 管理员组文章数量: 1087576
吉利数——字符串思想和逐位分解保留思想(Java/C++)
安徽大学算法期末机试3262题
题解:
最直观的思路便是直接利用字符串的contains特性,直接将数字转换为字符串,直接判断其是否含有7和13子串即可,但会超时;
java代码:
import java.util.Scanner;
class Test1{static int count = 0;public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int m = scanner.nextInt();int n = scanner.nextInt();solve(m,n);}static boolean check2(int i){String s = String.valueOf(i);if(!s.contains("13")){return true;}else{return false;}}static boolean check1(int i){while(i>0){int temp = i%10;if(temp==4){return false;}i/=10;}return true;}public static void solve(int m,int n){for(int i=m;i<=n;i++){if(check1(i) && check2(i)){count++;}}System.out.print(count);}
}
C++代码:
#include<iostream>
#include<string>
#include<stdio.h>
using namespace std;
int m;
int n;
int count = 0;
bool check2(int i){string s = to_string(i);string::size_type idx; idx = s.find("13");if(idx == string::npos )//不存在{ return true;} else{return false;}
}
bool check1(int i){while(i){int temp = i%10;if(temp==4){return false;}i/=10;}return true;
}
void solve(){for(int i=m;i<=n;i++){if(check1(i) && check2(i)){count++; }}printf("%d",count);
}int main(){scanf("%d %d",&m,&n);solve();return 0;
}
思考:
为了不超时,舍弃了字符串的思想,我们可以还是按照判断7一样,对13也进行判断,即我们对所给数字进行逐位分解,不同于以前的是,我们在判断是否含有13时,在拿到一位的数字后要先保留下来,等拿到第二个数字时将原先保存的拿出来一起进行判断,这便是对于二位数的是否含有进行的判断,即利用先保存的一个思想。
代码:
#include<iostream>
using namespace std;int fun4(long long x){int flag = 0;while(flag==0 && x>0){if(x%10==4){flag = 1;}else{x /= 10;}}return flag;
}int fun13(long long x){int flag = 0;int last = 0;while(flag==0 && x>0){if(x%10==1 && last==3){flag = 1;}else{last = x % 10;x /= 10;}}return flag;
}int main ()
{long long m, n;long long count = 0;cin >> m >> n;for (long long i = m; i <= n;i++){if(fun4(i)||fun13(i)){}else count++;}cout << count+1;return 0;
}
本文标签: 吉利数字符串思想和逐位分解保留思想(JavaC)
版权声明:本文标题:吉利数——字符串思想和逐位分解保留思想(JavaC++) 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/p/1700300481a386643.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论