题目:判断101-200之间有多少个素数,并输出所有素数。(素数又叫质数,就是除了1和它本身之外,再也没有整数能被它整除的数。)
提示:用从2开始的数一直到它本身-1,去整除。
public static void main(String[] args) {
System.out.print("质数包括:");
int input=101;
int i=2;
for(input=101;input<201;input++){
for(i=2;i<input;i++){
if(input%i==0){
input++;
}
}
System.out.print(input+" ");
}
题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。
提示:先求出个、十、百位的数字。X%10是取余数,X/10是取整数。
int x,y,z;
int i;
for(i=100;i<1000;i++){
z=i/100;
y=(i-100*z)/10;
x=i%10;
if(i==x*x*x+y*y*y+z*z*z){
System.out.println(i+"是水仙花数");
}
}
题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加)。几个数相加有键盘控制。
提示:先找出规律,再利用Math.pow(10, i)函数,求出每一次累加对应的数字。注意过程中的强制类型转换。
Scanner sc =new Scanner(System.in);
System.out.println("请输入基数数字");
int input = sc.nextInt();
System.out.println("请输入运行次数");
int acount = sc.nextInt();
int i=0,j=0;
int sum=0;
for(;i<acount;i++){
j=(int) (input*Math.pow(10, i)+j);
System.out.println(j);
sum=sum+j;
}
System.out.println("求的结果为"+sum);
题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次落地时,共经过多少米?第10次反弹多高?
提示:依旧是先找规律,注意浮点型变量。
double height=100;
double sum=100;
int i=0;
double j=0;
for(i=0;i<10;i++){
j=100*Math.pow(0.5, i);
sum=sum+j;
System.out.println("第"+(i+1)+"次落地(上升下降)遍历的高度"+j);
System.out.println("第"+(i+1)+"次落地(上升下降)遍历的总计高度"+sum);
}
题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
提示:把个、十、百位上的数字可能情况都遍历一遍,然后在所有的情况中筛选出互不相同且无重复的三位数。
int x,y,z;
for(x=1;x<5;x++){
for(y=1;y<5;y++){
for(z=1;z<5;z++){
if(x!=y&&x!=z&&y!=z){
System.out.println(x*100+y*10+z);
}
}
}
}
题目:输入三个整数x,y,z,请把这三个数由小到大输出。
提示:排序的话,随便用一种方法就可以了。此处用了冒泡排序。
Scanner sc =new Scanner(System.in);
int []Array = new int[3];
int temp;
System.out.println("请输入三个整数:");
for(int i=0;i<1;i++){
for(int j=0;j<1;j++){
for(int n=0;n<1;n++){
int input = sc.nextInt();
Array[0]=input;
}
int input = sc.nextInt();
Array[1]=input;
}
int input = sc.nextInt();
Array[2]=input;
}
for(int b=0;b<Array.length;b++){
for(int a=0;a<Array.length;a++){
if(Array[a]>Array[a+1]){
temp=Array[a];
Array[a]=Array[a+1];
Array[a+1]=temp;
}
}
}
System.out.print("从小到大排序为:");
for(int a=0;a<3;a++){
System.out.print(Array[a]+" ");
}
当然这道题还有更简单的解法(如下图所示),但这个思路仅仅适用于少数的几个数比较,上面的那个冒泡排序方法通用性更强吧。
题目:输出9*9口诀。
提示:先了解九九乘法表的样式,然后找出规律解题。
int product;
for(int i=1;i<10;i++){
for(int j=1;j<=i;j++){
product=i*j;
System.out.print(i+"*"+j+"="+product+" ");
}
System.out.println();
}
题目:打印出如下图案(菱形)
提示:先学会打印一个三角形(见下图),然后翻转一下就成了菱形了。(翻转意味着对for循环的控制语句进行修改)
int i,j;
int []Arr = new int[4];
Arr[0]=8; Arr[1]=6; Arr[2]=3; Arr[3]=1;
for(i=3;i>=0;i--){
for(j=i;j>0;j--){
System.out.print(" ");
}
for(j=Arr[i];j>0;j--){
System.out.print("*");
}
System.out.println();
}
for(i=1;i<4;i++){
for(j=0;j<i;j++){
System.out.print(" ");
}
for(j=Arr[i];j>0;j--){
System.out.print("*");
}
System.out.println();
}
题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。
提示:先找出分子分母的变化规律,如果掌握了分子分母的正确输出,那除法和求和就没问题了。注意用浮点型,因为整型在做除法的时候会去掉小数位,只保留整数位。
double i=2;
double j=1;
double sum=0;
for(int n=0;n<20;n++){
sum=sum+(i/j);
double temp=i;
i=i+j;
j=temp;
}
System.out.println(sum);
题目:给一个不多于5位的正整数,要求:一、求它是几位数;二、逆序打印出各位数字。
提示:先要分别求出个、十、百、千、万位上的数字存入数组中,再通过数组下标做一个排序打印。
int Num;
int []Arr =new int[5];
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个不多于5位的正整数:");
String number = sc.next();
int length =number.length();
Num=Integer.parseInt(number);//强制类型转换
System.out.println(length);
for(int i=0;i<number.length();i++){
Arr[i]=(int) (Num/(Math.pow(10, length-1)));//用数组存放个十百千位上的数字
Num=(int) (Num-Arr[i]*(Math.pow(10, length-1)));//求出下一位数字
length--;
}
for(int j=number.length()-1;j>=0;j--){
System.out.print(Arr[j]+" ");
}
题目:输入一个5位数的正整数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
提示:和上一题差不多,不过相对简单一点了。
int Num;
int []Arr =new int[5];
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个5位数的正整数:");
int number = sc.nextInt();
for(int i=5;i>0;i--){
Arr[i-1]=(int) (number/(Math.pow(10, i-1)));//用数组存放个十百千位上的数字
number=(int) (number-Arr[i-1]*(Math.pow(10, i-1)));
}
if(Arr[0]==Arr[4]&&Arr[1]==Arr[3]){
System.out.println("这个数是回文数。");
}
else
System.out.println("这个数不是回文数。");
题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
提示:举例数组{2,4,5,8,9},按从小到大排序,插入数组中,要先给原数组扩容。
Arr =Arrays.copyOf(Arr,Arr.length+1);//数组扩容函数
int Arr[] = {2,4,5,8,9};
Scanner sc = new Scanner(System.in);
int number = sc.nextInt();
int temp;
Arr =Arrays.copyOf(Arr,Arr.length+1);//数组扩容
Arr[5]=number;
for(int i=0;i<5;i++){
if(Arr[5]<Arr[i]){
temp=Arr[i];
Arr[i]=Arr[5];
Arr[5]=temp;
}
}
for(int j=0;j<6;j++){
System.out.print(Arr[j]+" ");
}
【星标题】题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下
的是原来第几号的那位。
提示:此解法使用的是动态数组ArrayList。通过变量n,来模拟报数;通过动态数组的下标Index来表示每个人的序号。
Scanner sin = new Scanner(System.in);
int num = sin.nextInt();
List<Integer> childList = new ArrayList<Integer>();
//动态数组的声明,其中Integer是int的包装类
//包装类是为了将基本数据类型当作对象操作引入
for (int i = 1; i <= num; i++) {
childList.add(i);//生成一个1、2、3...的数组
}
int index = 0;//下标
int n = 1;
while(childList.size() != 1) {
if(n % 3 == 0) {
childList.remove(index);//删除当前下标对应的内容。
n = 0; //相当于初始化n
index--; //数组下标变成前一个数字,回到此次操作前的状态
}
n++;
if(index != childList.size()-1) {
index++;
}
else {
index = 0;
//当动态数组里只有两个内容存储时,遍历过一遍之后指针再回到第一个下标处
}
}
System.out.println(childList.get(0));
题目:打印出杨辉三角形
提示:杨辉三角的特点是三角形的两条斜边上都是数字1,而其余的数都等于它肩上的两个数字相加。故而用两个数组来相互表示每一行的各个数值会比较方便。
int i=1;
int j;
int A[]=new int[20];
int B[]=new int[20];
A[0]=1;
B[0]=1;
System.out.println(+A[0]);
while(i<10){
System.out.print(B[0]+" ");
for(j=1;j<=i;j++){
B[j]=A[j]+A[j-1];
System.out.print(B[j]+" ");
}
i=i+1;
System.out.println();
//System.out.println("换A数组");
System.out.print(A[0]+" ");
for(j=1;j<=i;j++){
A[j]=B[j]+B[j-1];
System.out.print(A[j]+" ");
}
i=i+1;
System.out.println();
//System.out.println("换B数据");
}
以上代码只实现了在每行的数值上和杨辉三角相同,至于等腰三角形的形状则没有实现。其实现情况如下:
题目:利用递归方法求5!。
提示:return了解一下。return用在void函数中则会中止程序运行,这也是带有void标识符的函数无返回值的要求。
public class Try01 {
public int f(int n){
if(n==0){
return 1;
}
return n*f(n-1);
}
public static void main(String[] args) {
System.out.println((new Try01()).f(5));
}
}
题目:写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。
提示:length作为点后缀使用可直接求字符串长度。
Scanner sc =new Scanner(System.in);
String input = sc.next();
int Length;
Length=input.length();
System.out.println("该字符串长度为:"+Length);
但是此处字符串中无法识别带空格符的。
将接收用户输入的地方改成nextLine。
Scanner sc =new Scanner(System.in);
String input = sc.nextLine();
System.out.println("该字符串长度为:"+input.length());
就可以解决了上述问题了。
题目:杭电ACM1000,Java解法。
提示:几次提交都显示Wrong Answer,然后查了攻略,发现在输入部分有问题。顺便get新技能sc.hasnext()。
import java.util.Scanner;
public class Main {
public static void main(String args[]){
int a,b;
Scanner sc=new Scanner(System.in);
while(sc.hasNextInt()){
a=sc.nextInt();
b=sc.nextInt();
System.out.println((a+b));
}
}
}
简单字符串查找的方法。 Java提供了一个库函数叫做indexOf()。这个方法可以用在String对象上,它返回的是要查找的字符串所在的位置序号。如果查找不到则会返回-1。