手痒刷题系列:3/1日刷题记录

103 篇文章 0 订阅

————题目摘自某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(坑)

//*************************************************************************************************************************


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值