java经典50道编程题(很好练逻辑思维的题)(第四篇)
【程序31】
题目:将一个数组逆序输出。
程序分析:用第一个与最后一个交换。
public static void main(String[] args) {
int[]arrA={1,3,44,22,77,99};
int[]arrB=newint[arrA.length];
int j=arrA.length;
for (inti = 0; i < arrA.length; i++) {
arrB[i]=arrA[j-1];
j–;
}
System.out.println(“数组A逆序输出为:”+Arrays.toString(arrB));
}
}
【程序32】
题目:取一个整数a从右端开始的4~7位。
程序分析:可以这样考虑:
看下面的详细解说
public static void main(String[] args) {
System.out.println(“输入一个整数:”);
Scanner scanner=new Scanner(System.in);
long num=scanner.nextLong();//获取输入
String str=Long.toString(num);//把数字转化为String类型的
char[]ch=str.toCharArray();//把String类型的字符,转化为char类型,每一个数字赋值到字符型数组中
int n=ch.length;//字符型数组的长度
System.out.println(“该整数从右端开始的4-7位为:”+ch[n-7]+ch[n-6]+ch[n-5]+ch[n-4]);//输出结果
scanner.close();//关闭输入流
}
【程序33】
题目:打印出杨辉三角形(要求打印出10行如下图)
程序分析:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1、二维数组的使用
2、第一列的数都是1
3、使用两个for循环,i控制行,j控制列;
从第二行第二列起arr[i][j]=arr[i-1][j-1]+arr[i-1][j]
public static void main(String[] args) {
int[][]arr=newint[10][10];
for (inti = 0; i < arr.length; i++) {
arr[i][0]=1;//控制第一列的数等于1
}
for (inti = 1; i < arr.length; i++) {
for (intj=1; j < arr.length; j++) {
arr[i][j]=arr[i-1][j-1]+arr[i-1][j];//赋值
}
}
//打印结果
for (inti = 0; i < arr.length ; i++) {
for (intk = arr.length-i;k>0;k–) {//空格的控制,为了好看
System.out.print(" ");
}
for (intj = 0; j < arr.length; j++) {//打印出数组的数字
if (arr[i][j]!=0) {//把把没赋值的零去掉
System.out.print(arr[i][j]+" ");
}
}
System.out.println();//控制换行
}
}
}
【程序34】
题目:输入3个数a,b,c,按大小顺序输出。
程序分析:利用指针方法。
public static void main(String[] args) {
System.out.println(“请输入三个数:”);
Scanner scanner = new Scanner(System.in);
int num1 = scanner.nextInt();//获取输入的数
int num2 = scanner.nextInt();
int num3 = scanner.nextInt();
scanner.close();
int temp = 0;
if (num1 >num2) {//确保num2>num1
temp = num1;
num1 = num2;
num2 = temp;
}
if (num1 >num3) {//确保num3>num1
temp = num1;
num1 = num3;
num3 = temp;
}
if (num2 >num3) {//确保num3>num2
temp = num2;
num2 = num3;
num3 = temp;
}
System.out.println(“这三个数从大到小排列:”+num3+" “+num2+” "+num1 );
}
}
【程序35】
题目:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
程序分析:1、找到该数组的最大值和最小值
* 找到该数组最大项把它和第一位交换,
* 找到该数值的最小项把它和最后一项交换
* 这里有一点值得注意:不能把最大值和最小值先找出来,再连续执行两次操作交换,会出错!
* 还有一点要注意:没叫到要交换的数值的位置不变,我在网上查了的都会有乱序的
public static void main(String[] args) {
System.out.print(“请输入一组数:”);
Scanner scan = new Scanner(System.in).useDelimiter("\s");
int[]arrA = newint[50];
intm = 0;//数组的长度
while(scan.hasNextInt()){//不断给数组A赋值
arrA[m++] =scan.nextInt();
}
scan.close();//关闭输入流
int[]arrB = newint[m];//创建数组B,要求刚好适应输入的数字的个数
for(inti=0;i<m;i++){
arrB[i] =arrA[i];//把数组A不为零的数值赋值给数组B
}
intmax=0;
intmin=arrB[1];//定义数组的最小值
for (inti = 0; i < arrB.length; i++) {
if (arrB[i]>max) {//求数组的最大值
max=arrB[i];
}
if (arrB[i]<=min) {//求数组的最小值
min=arrB[i];
}
}
intmax_i=0;//定义数组最大值的下标
intmin_i=0;//定义数组最小值的下标
for (inti = 0; i < arrB.length; i++) {
if (max==arrB[i]) {
max_i=i;
}
}
inttemp=0;//定义一个交换值
//把最大的值和第一个值交换
temp=arrB[0];
arrB[0]=arrB[max_i];
arrB[max_i]=temp;
//求数组最小值的下标
for (inti = 0; i < arrB.length; i++) {
if (min==arrB[i]) {
min_i=i;
}
}
//把最小的值和最后一个值交换
temp=arrB[arrB.length-1];
arrB[arrB.length-1]=arrB[min_i];
arrB[min_i]=temp;
System.out.println(Arrays.toString(arrB));
scan.close();
}
}
【程序36】
题目:有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数
程序分析:在原来数组的基础上还要创建一个和原来数组大小一样的数组
* 根据要移动的位数把原来的数组分割成两个部分分别赋值给新的数组
public static void main(String[] args) {
System.out.println(“输入一个十个数的组数:”);
Scanner scanner=new Scanner(System.in);
int n=10;
int[]arrA=newint[n];
for (inti = 0; i < n; i++) {
arrA[i]=scanner.nextInt();//获取十个数组
}
System.out.println(“没移动前的数组:”+Arrays.toString(arrA));
System.out.println(“请输入要往后移动的个数:”);
int m=scanner.nextInt();//获取输入往后退的个数
m%=n;//十个相当于循环
int[]arrB=newint[n];//创建和数组A大小一样的数组B
int k=m;//创建一个可变的变量
for (inti = m; i < arrA.length;i++) {
arrB[i]=arrA[i-m];
}
for (inti = 0; i <m;i++) {
arrB[i]=arrA[arrA.length-k];
k–;
}
System.out.println(“移动后的数组:”+Arrays.toString(arrB));//输出数组B
scanner.close();
}
}
【程序37】
题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
关键问题是怎么移除》?:布尔值确定,如果被选中被赋值为false
* 从第一个人开始判断,如果他在圈内,那么报数,再判断他报的数是否是3,如果是的话移出圈外
* 接着判断下一个人,是否到了最末,如果是的话,从零开始
* 不断循环,直到最后剩下1个人
public static void main(String[] args) {
System.out.print(“请输入一个整数:”);
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
scan.close();
//定义数组变量标识某人是否还在圈内
boolean[]isIn = newboolean[n];
for(inti=0;i<isIn.length;i++){
isIn[i] =true;
}
int inCount = n;//定义圈内人数
int countNum = 0;//定义报数
int index = 0;//定义索引
while(inCount>1){//最后一人时退出循环
if(isIn[index]){//判断下一个人是否在圈内
countNum++;//在的话报数
if(countNum==3){//如果这个数等于3
isIn[index] =false;//把他定义为出圈
countNum = 0;//报数清零,下一个好从1开始
inCount–;//圈内人数减一
}
}
index++;//下一人的位置索引值
if(index==n){//当索引到最后之后再从头开始
index = 0;
}
}
for(inti=0;i<n;i++){
if(isIn[i]){//最后只有一个符合条件的
System.out.println(“留下的是:”+(i+1));
}
}
}
}
【程序38】
题目:写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。
public static void main(String[] args) {
System.out.println(“请输入一串字符:”);
Scanner scanner=new Scanner(System.in);
String input=scanner.next();//获取输入的字符串
System.out.println(“你输入的字符串是:”+input);
System.out.println(“你输入的字符串长度是:”+input.length());
scanner.close();
}
}
【程序39】
题目:编写一个函数,输入n为偶数时,调用函数求1/2+1/4+…+1/n,当输入n为奇数时,调用函数1/1+1/3+…+1/n(利用指针函数)
程序分析:1、先判断是奇数还是偶数
* 2、分数分子都是一,偶数分母从2开始,奇数的分母从1开始,分母差值都为2
import java.util.Scanner;
public static void main(String[] args) {
System.out.println(“请输入一个整数:”);
Scanner scanner=new Scanner(System.in);
int input=scanner.nextInt();
doublesum=0;//总和
if (input%2==0) {//偶数
for (doublei = 2; i <=input; i+=2) {
sum+=1/i;
if (i==input) {
System.out.print(“1/”+(int)i);//输出最后一项,最后用break,中断后面的执行
break;
}
System.out.print(“1/”+(int)i+" + ");//输出相加的项后面加个加号
}
}else {//奇数情况
for (doublei = 1; i <=input; i+=2) {
sum+=1/i;
if (i==input) {
System.out.print(“1/”+(int)i);//输出最后一项,最后用break,中断后面的执行
break;
}
System.out.print(“1/”+(int)i+" + ");//输出相加的项后面加个加号
}
}
System.out.println(" = "+sum);
scanner.close();
}
}
【程序40】
题目:字符串排序。
无语!这里要用一个封装的方法:booleanb=string1.compareTo(string2);
* string1的类型值string2大于,则b是大于零,否者小于零
public class Prog40{
public static void main(String[] args){
String[] str = {“abc”,“cad”,“m”,“fa”,“f”};
for(int i=str.length-1;i>=1;i–){
for(int j=0;j<=i-1;j++){
if(str[j].compareTo(str[j+1])<0){
String temp = str[j];
str[j] = str[j+1];
str[j+1] = temp;
}
}
}
for(String subStr:str)
System.out.print(subStr+" ");
}
}
java经典50道编程题(很好练逻辑思维的题)(第四篇)相关推荐
- java经典50道编程题(很好练逻辑思维的题)(第一篇)
[程序1] 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少? 程序分析:兔子的规律为数列1,1,2, ...
- java经典50道_50道经典的JAVA编程题(41-45)
50道经典的JAVA编程题(41-45),苦逼的程序猿,晚上睡不着了编程吧~今天坚持做10道题!发现编程能是我快乐...O(∩_∩)O哈哈~能平静我烦乱的心,剩下5道题留到考试完了再做吧!该睡觉了.. ...
- java基础50道编程题
50道JAVA基础编程练习题 [程序1] 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少? 程序分析 ...
- JAVA基础-50道编程题
[程序01] 题目:有五个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括学生号,姓名,三门课成绩),计算出平均成绩,将原有的数据和计算出的平均分数存放在磁盘文件"stud" ...
- 找工作 50道编程题Java实现(32-50)
程序32 左移右移 题目:取一个整数a从右端开始的4-7位. 分析:比如取123456789从右端开始的4-7位即:3456 1 package test50; 2 /* 3 * 题目:取一个整数a从 ...
- 软件构造(Java)——50道100以内的加减法口算习题(升级版)
题目: 用Java程序生成50道100以内加法/减法算式的习题,并输出. (1)每个算式还需要答案: (2)加法算式的和不能超过100: (3)减法算式的差不能小于0: (4)把算式输出到文本文件中: ...
- java经典50题_JAVA经典算法50题(3)【面试+工作】
原标题:JAVA经典算法50题(3)[面试+工作] JAVA经典算法50题(3)[面试+工作] [程序21] 题目:求1+2!+3!+...+20!的和. 1.程序分析:此程序只是把累加变成了累乘. ...
- Scala、Java 50道编程题
⚠️ 不保证题解的正确性! 1.有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? def main(args: Ar ...
- Java基础50道经典练习题
一.基础问答15题 1.[基本概念问答] 请问Java语言是跨平台的吗?JVM是跨平台的吗?为什么? 答: Java语言是跨平台的,JVM是不跨平台的. Java能跨平台正是以JVM不跨平台为代价的. ...
最新文章
- Postfix+dovecot+extmail+sasl+mysql源码安装手册
- 键空间通知(keyspace notification)
- px4 uavcan linux,PX4开发指南-12.2.1.UAVCAN Bootloader
- java set的first_Java TreeSet pollFirst()方法与示例
- 捋一捋js面向对象的继承问题
- 2017 秦皇岛CCPC Balloon Robot (ZOJ 3981)
- c语言和python的堆栈,python - 在C ++中更快地执行两个程序的可能解释(与Python比较)? - 堆栈内存溢出...
- 双层pdf软件free_如何一键下载网上文档以及pdf
- easyar no matched package name
- Latex的各种帽子
- mappedBy和JoinColumn实质上指向的是同一个表即外键作为主键所在的表对应的实体
- 注册oracle驱动,[XXX] 注册了JDBC驱动程 序 [oracle.jdbc.OracleDriver]
- Excel 对象模型
- php文章相似度计算,PHP相似度算法
- mysql 5.7.24-winx64_mysql-5.7.24-winx64下载与安装
- svd与svd++联系与区别
- KUKA KRC4 控制器截图
- 在表7中筛选出计算机或英语要补考的人,计算机会考操作题库 - 四明职业高级中学.docx...
- EventBus的基本使用
- 关于128x64OLED屏幕字体类型以及字体大小添加方法