Day5
题目:取一个整数a从右端开始的4~7位。
public static void main(String[] args) {
int a = 12345678;
int begin = 4; //开始位置
int end = 7; //结束位置
a = a / (int)Math.pow(10, begin-1);
for(int i = 1; i <= end - begin + 1; i++) {
System.out.print(a%10);//取余输出
a = a / 10;//取出后删除余数
}
}
运行结果:
题目:对10个数进行排序
分析:可以利用选择法,即从后9个比较过程中,选择一个最小的与第一个元素交换,
下次类推,即用第二个元素与后8个进行比较,并进行交换。
public static void main(String[] args) {
//生成10个随机数,并存入数组
int[] a = new int[10];
for(int i = 0; i < 10; i++) {
a[i] = (int)(Math.random()*100+1);//Math.random()生成[0,1)之间的随机小数
}
System.out.println("原数组:\n"+Arrays.toString(a));
//冒泡排序
//升序
for(int i=0; i <a.length-1; i++) {//由于前面已经排好,所以最后一个不用排
for(int j = 0; j < a.length-1 - i; j++) {
//优化:j < a.length-1 - i ==> 由于后面的i个数已经排好序,所以不用再排
if(a[j] > a[j+1]) {
int temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
System.out.println("升序排序后的数组:\n"+Arrays.toString(a));
//降序
for(int i = 0; i < a.length-1; i++) {
for(int j = 0; j < a.length - 1 -i; j++) {
if(a[j] < a[j+1]) {
int temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
System.out.println("降序排序后的数组:\n"+Arrays.toString(a));
}
运行结果:
题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
public static void main(String[] args) {
//先把每一位数分离出来
int a = 1237321;
int[] data = new int[0];//存放分离的数
while(true) {//不能确定循环次数的时候使用while循环
int num = a % 10;//得到个位
data = Arrays.copyOf(data, data.length+1);//数组扩容
data[data.length-1] = num;//每得到一个数都放到数组后边
a = a / 10;//把最后一个数去掉
if(a == 0) {//a=0说明数据没用了,应该结束循环
break;
}
}
//将得到的数组输出一下
System.out.println(Arrays.toString(data));
boolean flag = true; //设置一个标志位
for(int i = 0; i < data.length/2; i++) {//length/2:只需要判断一半
//循环里做判断第一位和对称位操作
if(data[i] != data[data.length-1-i]) {
//如果不等,那么更新标志位
flag = false;
break;//不再往后判断
}
}
//循环结束后,需根据标志位判断该数是否是回文
if(flag) {
System.out.println("是回文!");
}else {
System.out.println("不是回文!");
}
}
运行结果:
题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入一个不多与5的正整数:");
int num = scanner.nextInt();
f1(num);//方法1
// f2(num);//方法2
}
private static void f1(int num) {
int count = 0;
if(num >0 && num <10000) {
//先不能确定几位数,所以使用while循环
while(true) {
int a = num % 10;//去最后一位
System.out.print(a+"\t");
num = num / 10;//删除最后一位并更新数据
count = count + 1;
if(num == 0) {
break;
}
}
System.out.println("\n是"+count+"位数");
}else {
System.out.println("输入错误!");
}
}
private static void f2(int num) {
if(num >0 && num <10000) {
String str = "" + num;
System.out.println("是"+str.length()+"位数");
//已知位数,现在使用for循环
for(int i = 1; i <= str.length(); i++) {
int a = num % 10;
System.out.print(a+" ");
num = num / 10;
if(num == 0) {
break;
}
}
}else {
System.out.println("输入错误!");
}
}
运行结果:
题目:打印出如下图案(菱形)
分析:先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重 for循环,第一层控制行,第二层控制列。
public static void main(String[] args) {
//上三角形,下三角形
int line = 7;
int n = 0; //三角形的行数
if (line % 2 == 0){//偶数就直接除
n = line / 2;
}else{//奇数要加1变偶数再除
n = (line + 1)/2;
}
for (int i = 1; i <= n; i++){
//打印空格
for(int j = 1; j <= (n-i); j++){
System.out.print(" ");
}
//打印 *
for(int j = 1; j<= 2*i - 1; j++){
System.out.print("*");
}
System.out.println();
}
//下三角形
for(int i = 1; i <= (line-n); i++){
//打印空格
for (int j = 1; j <= i; j++){
System.out.print(" ");
}
//打印 *
for(int j = 1; j <= (n-i)*2-1; j++){
System.out.print("*");
}
System.out.println();
}
}
运行结果:
【程序33】
题目:打印出杨辉三角形(要求打印出10行如下图)
分析:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
public static void main(String[] args) {
//打印10行
int[] pre = {};
for (int line = 1; line <= 10; line++) {
int[] nowLine = sjLine(pre, line);//计算当前行的数据值
pre = nowLine;
//打印空格
for(int j = 1; j <= 10 -pre.length; j++){
System.out.print(" ");
}
//打印数据
for(int k = 0; k < nowLine.length; k++){
System.out.print(nowLine[k] + " ");
}
System.out.println();
}
}
//杨辉三角的每一行数据,保存为一个数组
public static int[] sjLine(int[] pre, int line){
if (line == 1) {
int[] arr = new int[]{1}; //局部变量
return arr;
}else if(line == 2) {
int[] arr = new int[]{1,1};
return arr;
}else{
int[] arr = new int[line]; //数组长度等于当前的行号
arr[0] = 1; //第一个数始终是 1
arr[line-1] = 1;//最后一个数始终是 1
for(int i = 0; i < pre.length - 1; i++){
arr[i+1] = pre[i] + pre[i+1]; //前数组对应元素相加存到后数组对应为止
}
return arr;
}
}
运行结果: