publicclassMain{ publicstaticvoidmain(String[] args){ Scanner sc = new Scanner(System.in); int N = sc.nextInt(); int count = 0; for(int i = 1; i <= N; i++){ int mul = i * i * i; int sqrt = (int)Math.sqrt(mul); if(sqrt * sqrt == mul){ count++; } } System.out.println(count); } }
publicclassMain{ publicstaticvoidmain(String[] args){ Scanner sc = new Scanner(System.in); int a = sc.nextInt(); int b = sc.nextInt(); //15 * m + 10 * n = 400 5 * m + 10 * n = 300 System.out.println((a - b) / 10 + " " + (3 * b - a) / 20); } }
publicstaticvoidmain(String[] args){ Scanner sc = new Scanner(System.in); int N = sc.nextInt();//N个整数 int[] nums = newint[N]; int count = 0; for(int i = 0; i < nums.length; i++){ nums[i] = sc.nextInt();
} for(int i = 0; i < nums.length - 2; i++) { if (!isPrime(nums[i]) && !isPrime(nums[i + 1]) && !isPrime(nums[i + 2])) count++; } System.out.println(count);
} //返回true,不是合数;返回false,是合数 publicstaticbooleanisPrime(int n){ //质数不小于2 2,3,5,7。。。 if(n < 2) returnfalse; for(int i = 2; i <= Math.sqrt(n); i++){ if(n % i == 0) returnfalse; } returntrue; }
题目3:统计1-N之间所有平方数的个数
输入:50 输出:7
publicstaticvoidmain(String[] args){ Scanner sc = new Scanner(System.in); int N = sc.nextInt(); int count = 0; for(int i = 1; i <= N; i++){
int m = (int)Math.sqrt(i); if(m * m == i){ count++; } } System.out.println(count); }
方法一: 双重for循环。建立一个数组res存储所有K区间的Sk值。第一层遍历所有的N - K + 1个区间,第二层遍历区间的K个元素,如果有素数,加入到res[i]中,最后在结果数组res中取最大值。
publicclassSolution2_19{ publicstaticvoidmain(String[] args){ Scanner sc = new Scanner(System.in); int N = sc.nextInt(); int K = sc.nextInt(); int[] nums = newint[N]; for (int i = 0; i < N; i++) { nums[i] = sc.nextInt(); } //区间个数 int[] res = newint[N - K + 1]; int max = 0; for (int i = 0; i < N - K + 1; i++) { for (int j = i; j < i + K; j++) { //是素数 if (isPrime(nums[j])) { res[i] += nums[j];
} } int temp = 0; if (res[i] > max) { temp = max; max = res[i]; res[i] = temp; }
} System.out.println(max); // Arrays.sort(res); // System.out.println(res[N - K]); } //判断是否是素数 publicstaticbooleanisPrime(int a){ boolean flag = true; if (a < 2) {// 素数不小于2 returnfalse; } else { for (int i = 2; i <= Math.sqrt(a); i++) { if (a % i == 0) {// 若能被整除,则说明不是素数,返回false flag = false; break;// 跳出循环 } } } return flag; } }
方法一:和另一道题类似,在双重循环中定义最大值max,最小值min为K区间首个元素,下面再进行判断是否还有比max大的重新确定为max,比min小的重新确定为min。max-min即为Dk,保存在数组res中,res长度为N - K + 1,输出即为res中的最大值。
publicclassSolution4{ publicstaticvoidmain(String[] args){ Scanner input = new Scanner(System.in); int N = input.nextInt(); int K = input.nextInt(); //先划分为 N-K+1 个 K区间,在区间内排序,计算最大绝对值 //N-K+1 数组的区间数 int[] nums = newint[N]; for(int i = 0; i < N; i++){ nums[i] = input.nextInt(); } int[] res = newint[N - K + 1]; int max = 0;int min = 0; for (int i = 0; i < N - K + 1; i++) { for (int j = i; j < i + K ; j++) { max = nums[i]; min = nums[i];
if(nums[j] > max) { max = nums[j]; } if(nums[j] < min) { min = nums[j]; } }