2015第六届蓝桥杯 02 立方变自身(java)

探讨一种有趣的数学现象:某些数字的立方值,各位数字相加后仍等于原数。例如17³=4913,4+9+1+3=17。通过编程找出所有符合条件的正整数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


立方变自身


观察下面的现象,某个数字的立方,按位累加仍然等于自身。
1^3 = 1 
8^3  = 512    5+1+2=8
17^3 = 4913   4+9+1+3=17
...


请你计算包括1,8,17在内,符合这个性质的正整数一共有多少个?


请填写该数字,不要填写任何多余的内容或说明性的文字。



结果:

6


代码如下:

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int cnt = 0;
		for(int i=1;i<10000;i++){
			int s = i*i*i;
			int sum = 0;
			while(s % 10 > 0){	//234
				sum = sum + (s % 10);
				s /= 10;
				if(s==0){
					if(sum==i){
						System.out.println(i);
						cnt++;
					}
				}
			}
		}
		System.out.println();
		System.out.println(cnt);
	}

}

### 第十六届蓝桥杯 Java 试题解题思路 #### 题目概述 第十六届蓝桥杯竞赛中的 Java 组题目涵盖了多个知识点,包括但不限于基础算法、数据结构、字符串处理以及数学逻辑推理。以下是针对部分典型题目类型的解题思路。 --- #### 结果填空题 这类题目通常通过手算或者简单的程序验证得出结果。例如: ##### 示例:玉米地的总产量计算 给定一块矩形玉米地的长度 `n` 和宽度 `m`,每平方米的产量为 `a`,求该玉米地的总产量。 **解题思路** 可以通过直接乘法运算获得总产量。由于可能涉及较大的数值范围,因此需使用 `long` 类型存储结果[^3]。 ```java import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); // 玉米地的长 int m = sc.nextInt(); // 玉米地的宽 int a = sc.nextInt(); // 每平方米的产量 long total = (long) n * m * a; // 总产量 System.out.println(total); // 输出结果 } } ``` --- #### 编程题 编程题更注重考生的实际编码能力和对复杂问题的理解能力。以下是一些常见类型及其解题策略。 ##### 示例:日期计算问题 假设某一年的第一天是星期几已知,要求判断某一特定日期对应的星期几。 **解题思路** 利用取模操作简化大数计算过程。可以逐月累加天数并考虑闰年的影响,最终通过对 7 取模确定星期几[^2]。 ```java import java.util.Scanner; public class DateCalculator { public static boolean isLeapYear(int year) { return (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)); } public static int getDayOfWeek(int day, int month, int year, int firstDayOfYear) { int daysInMonth[] = {31, 28 + ((isLeapYear(year)) ? 1 : 0), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; int totalDays = 0; for (int i = 1; i < month; i++) { totalDays += daysInMonth[i - 1]; } totalDays += day; return (totalDays + firstDayOfYear - 1) % 7; } public static void main(String[] args) { Scanner sc = new Scanner(System.in); int day = sc.nextInt(); int month = sc.nextInt(); int year = sc.nextInt(); int firstDayOfYear = sc.nextInt(); int result = getDayOfWeek(day, month, year, firstDayOfYear); System.out.println(result); } } ``` --- #### 数学逻辑推理题 此类题目往往需要较强的抽象思维和数学建模能力。 ##### 示例:猜年龄问题 一个人的年龄满足其立方是一个四位数,而四次方是一个六位数。试推测此人的具体年龄。 **解题思路** 设此人年龄为 \( x \),则有以下条件成立: \[ 1000 \leqslant x^3 < 10000 \] \[ 100000 \leqslant x^4 < 1000000 \] 逐一尝试符合条件的整数即可找到唯一解[^1]。 ```java public class AgeGuessing { public static void main(String[] args) { for (int age = 1; age <= 100; age++) { if (Math.pow(age, 3) >= 1000 && Math.pow(age, 3) < 10000 && Math.pow(age, 4) >= 100000 && Math.pow(age, 4) < 1000000) { System.out.println("Age: " + age); } } } } ``` --- #### 数据结构与算法设计题 这些题目考验选手对于经典算法的应用熟练度。 ##### 示例:快速排序实现 编写一段代码完成数组的升序排列。 **解题思路** 采用分治思想递归划分待排序区间,并分别对左右子区间重复相同的操作直至整个序列有序化[^1]。 ```java public class QuickSortExample { public static void quickSort(int[] arr, int low, int high) { if (low < high) { int pi = partition(arr, low, high); quickSort(arr, low, pi - 1); quickSort(arr, pi + 1, high); } } private static int partition(int[] arr, int low, int high) { int pivot = arr[high]; int i = (low - 1); for (int j = low; j < high; j++) { if (arr[j] < pivot) { i++; swap(arr, i, j); } } swap(arr, i + 1, high); return i + 1; } private static void swap(int[] arr, int i, int j) { int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } public static void main(String[] args) { int[] array = {10, 7, 8, 9, 1, 5}; quickSort(array, 0, array.length - 1); for (int num : array) { System.out.print(num + " "); } } } ``` --- ####
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值