————题目摘自某projects网站,代码都是我自己写的。
————只是为了 分享和记录自己写代码。
第一题:
如果我们列出所有低于10的自然数是3或5的倍数,我们得到3,5,6和9,这些倍数的总和为23。
找到1000以下所有3或5的倍数的总和。
答案:233168.
codes:
C++版:
#include<iostream>
int Find_The_Number(int i);
int main()
{
int sum = 0, i=0;
for (i; i < 1000; i++) {
sum += Find_The_Number(i);
}
std::cout << "The Sum Is: " << sum << std::endl;
return 0;
}
int Find_The_Number(int i)
{
int test_1 = 1, test_2 = 1;
int res = 0;
test_1 = i % 3;
test_2 = i % 5;
if ((test_1 == 0)||(test_2==0)) {
res = i;
}
return res;
}
JAVA版(留坑):
//*************************************************************************************************************************
第二题:
斐波那契数列中的每个新项都是通过添加前两项来生成的。 从1和2开始,前10项将是:
1,2,3,5,8,13,21,34,55,89,...
通过考虑斐波纳契数列中不超过四百万的条件,求出偶数项的和。
答案:4613732
codes:
C++ :
#include<iostream>
long Find_The_endNum();
int main()
{
long sum = 0;//之所以用long,是因为开始以为这个sum 会特别大,用long 会比较安全和保险。
long end_num = 0;
end_num = Find_The_endNum();
std::cout << "end_num is: " << end_num << std::endl;//测试语句;
long i = 2, j = 3, m = 0;//m中间值,存储变化的j值
long res = 0;
while (j < end_num) {
m = j;
j += i;
i = m;
if ((j % 2) == 0) {
res = j;
sum += res;
}
}
sum += 2;
std::cout << "SUM IS: " << sum << std::endl;
return 0;
}
long Find_The_endNum()//找出4百万这个数4000000
{
long end_num = 4;
int cnt = 0;//循环计数器
for (cnt; cnt < 6; cnt++) {
end_num *= 10;
}
return end_num;
}
JAVA(挖坑先)
//*************************************************************************************************************************
第三题:
13195的主要组成数是5,7,13和29。
数字600851475143的最大的组成数是多少?(组成就是这几个数都是质数,且相乘为原数)
答案:6857
本题数字特别大,若是采用遍历的方法,耗时太多。由于是求最大的质数,所以找到一个除以次,缩小范围,再重新找一次,这样的方法便捷许多。
C++
#include<iostream>
#define NUM 600851475143
int main()
{
long i = 1;
long long k = (long long)NUM/i;
std::cout << k << std::endl;//因为要求的值非常非常大,所以这一步是判断程序是否能正常处理值;
long long res = 0;
long long max = 1;
for (i; i <= k;i++ ) {
if ((k%i) == 0) {
if (i >= max) {
max = i;
}
k = k / i;
i = 1;
}
}
std::cout << max << std::endl;
return 0;
}
JAVA(坑)
//*************************************************************************************************************************
第四题:
回文数字读取相同的方式。 由两个2位数字产品制成的最大回文是9009 = 91×99。
查找由两个3位数字产品制成的最大回文。
答案:906609;
C++
#include<iostream>
//带有R的都是编码时测试通过的意思;
int main()
{
int i = 100, j = 100;
int k = 1;
int mul = 0;
int res = 0;
int num[256] = { 0 };
int max = 1;
for (i; i < 1000; i++) {
j = 100;
for (j; j < 1000; j++) {
k = 1;
mul = i * j;
k = mul / k;
//std::cout << mul << std::endl;//R
int cnt = 0;
while ((k) != 0) {
k = k / 10;
cnt++;
}
res = cnt;
//std::cout << cnt << std::endl;//R
k = mul / 1;
//std::cout << k << std::endl;//R
cnt = cnt - 1;
for (cnt; cnt >=0; cnt--) {
num[cnt] = k % 10;
k = k / 10;
//std::cout << num[cnt] << std::endl;//R
}//每一位都拆开了放在数组中;
int n = 0,m=1;
for (n;n<=res;n++) {
res = res - 1;
if (num[n] != num[res]) {
m = 0;
break;
}
}//检察是否为回文数
//std::cout << m << std::endl;测试
if (m) {
if (mul > max)
max = mul;
}//得到最大的回文数
}
}
std::cout << max << std::endl;
return 0;
}
这个代码很原始,每一步都有基本都有测试代码。
这个题目感觉很直白,过程基本是:首先计算两数之积,再判断位数,得到每一位的数放入数组中,有数组就能更好的保存中间值和更好的寻找他们。再从数组中调用他们,按回文的定义进行比较。最后比较大小,的出结果。
JAVA(坑)
//*************************************************************************************************************************