package C;public class Sushu { public static void main(String[] args) { int sum=0; for (int i = 101; i < 201; i++) { for (int j = 2; j <=i; j++) { if(j==i) { System.out.println(j); } else if(i%j==0) { sum++; break; } } } System.out.println("总共有"+(100-sum)+"个素数"); }}
2、用最有效率的方法算出2乘以17等于多少
17>>1
3、有 1 亿个数字,其中有 2 个是重复的,快速找到它,时间和空间要最优
4、2 亿个随机生成的无序整数,找出中间大小的值
public class Test2{public static void main(String [] srgs){int i=(int)(Math.random()*900)+100;//int i= new java.util.Random().nextInt(900)+100;也可以System.out.println(i);}}
5、10 亿个数字里里面找最小的 10 个
package com.yuzhiyun;import java.util.Arrays;/** * 求一亿个数里面最小的10个数 * 首先建立节点个数为10的最大堆,然后考虑每一个新的值,让他和堆顶比较,比堆顶大的元素直接抛弃,如果比堆顶小的数字,让他替换堆顶,然后调整堆。 */public class MaxTenNumber { public static void main(String[] args) { /**第一个元素0不参与,只是用于占位置,这样的话,只要array[k]>array[2k] && array[k]>array[2k+1]那就是最大堆了, * 此外,这里暂时用20个数代替1亿个 */ int[] array={0,1,2,3,4,7,8,9,10,11,12,13,14,15,16,17,18,19,20,6,5}; //建立建立节点个数为10的最大堆 for(int i=10/2;i>=1;i--){ adjustHeap(array, i, 10); } //System.out.println(Arrays.toString(array)); for(int i=11;i<array.length;i++){ //如果这个元素小于堆顶,和堆顶交换,然后重新调整堆 if(array[i]<array[1]){ swap(array, i, 1); adjustHeap(array, 1, 10); } } System.out.println(Arrays.toString(array)); System.out.println("最小的10个数字为:"); for(int i=1;i<=10;i++){ System.out.print(array[i]+" "); } } /** * 交换 * @param array * @param i * @param j */ private static void swap(int[] array, int i, int j) { int tem=array[i]; array[i]=array[j]; array[j]=tem; } /** * 在以array[head]为根的左右子树是最大堆的前提下把以array[head]为根的树调整为最大堆 * @param array * @param head * @param tail */ static void adjustHeap(int[] array,int head,int tail){ int root=array[head]; int i=2*head; while(i<=tail){ int max=array[i]; if(i+1<=tail) if(array[i+1]>array[i]){ max=array[i+1]; i++; } if(root>max) //别手抖写成了return; break; else{ array[i/2]=array[i]; } i*=2; } array[i/2]=root; }}
package a;public class Wanshu { public static void main(String[] args) { for (int i = 1; i <= 1000; i++) { int sum=0; for (int j = 1; j < i; j++) { if(i%j==0) { sum+=j; } } if(i==sum) { System.out.println(i); } } }}
8、一个数组中所有的元素都出现了三次,只有一个元素出现了一次找到这个元素
int singleNumber(int A[], int n) { int result=0; for(int i=0;i<32;i++){ int bit=0; for(int j=0;j<n;j++){ bit+=(A[j]>>i)&1; } result |= (bit%3)<<i; } return result; }
public class TestZhiShu {public static void main(String[] args) { /** * 求100-1000之内的质数的数量 */ int count=0; for (int i = 102; i <= 1000; i++) { // 质数 for (int k = 2; k <= i; k++) { // 除数 // 排除所有在 i=k 之前 能被k整除(余数为0)的数 if (i % k == 0 && i != k) { break; } // 输出所有在 i=k 且 i%k=0的数 if (i % k == 0 && i == k) { //System.out.println(i); count++; } } } System.out.println(count); } }
public class CalculatingFactorial { public static void main(String args[]) { for (int counter = 0; counter <= 10; counter++) { System.out.printf("%d! = %d\n", counter, factorial(counter)); } } public static long factorial(long number) { if (number <= 1) return 1; else return number * factorial(number - 1); }}
17、开发 Fizz Buzz
参考:https://www.cnblogs.com/webary/p/6507413.html
18、给定一个包含 N 个整数的数组,找出丢失的整数
import java.util.*; public class Finder { public int findMissing(int[][] numbers, int n) { // write code here int i = 0; for(i=0; i<n; ++i){ if(i%2!=numbers[i][0]){ break; } } return i; } }
19、一个排好序的数组,找出两数之和为m的所有组合
public static void main(String[] args) throws UnsupportedEncodingException { int[] ints = { 1, 3, 10, 12 , 13, 18, 22 ,58 }; int find = 23; int start = 0; int end = ints.length - 1; while (ints[start] >= find) { System.out.println("都比他-------------------------------大哦!"); return; } while (end > start) { if (ints[start] + ints[end] == find) { System.out.println(ints[start] + " + " + ints[end] + " = " + find); end--; start++; } else if (ints[start] + ints[end] < find) { start++; } else if (ints[start] + ints[end] > find) { end--; } System.out.println(start +" "+end); } }
20、将一个正整数分解质因数。例如:输入90,打印出90=233*5。
//【程序4】FenJie.java 题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。 程序分析:对n进行分解质因数, //应先找到一个最小的质数k,然后按下述步骤完成: (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。 //(2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数n,重复执行第一步。 //(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。 //任何一个正整数都可以分解为其由多个质数相乘。。 import java.io.*; import java.util.*; public class FenJieApp { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub System.out.println("请输入数字:"); Scanner scanner = new Scanner(System.in); int parm=scanner.nextInt(); System.out.print(parm+"="); for(int i=2;i<=parm;i++) { while(parm!=i) { if(parm%i==0) { System.out.print(i+"*"); parm=parm/i; } else break; } } System.out.print(parm); } }
package com.hanqi;public class Text4 { public static void main(String[] args) { for (int num=100;num<1000;num++) { int gw=num%10; int sw=num/10%10; int bw=num/100%10; if (gw*gw*gw+sw*sw*sw+bw*bw*bw==num) { System.out.println(num); } } }}