失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Java算法篇之打印小星星和成绩名次统计

Java算法篇之打印小星星和成绩名次统计

时间:2024-01-22 04:00:01

相关推荐

Java算法篇之打印小星星和成绩名次统计

打印正反三角形和冒泡排序算法

1.1 打印正反三角形1.2 打印相框1.3 打印字母1.3.1 打印字母一1.3.2 打印字母二1.4 分数名次统计

1.1 打印正反三角形

当n=3的时候,如果想要打印如下图所示的正反三角形,应该怎么做呢?

*******************************

如果我们仔细观察,这道题并不难,它有一个规则就是:

上半部分: 每行的小星星逐行变少,空格逐行增多下班部分: 每行的小星星逐行增多,空格逐行变少

因此总体思路就是最外层循环控制行数,嵌套一个循环,控制列数

逐行增多就循环时候递增(i++),逐行递减就是循环时候递减(i--)

这道题的难点其实是什么时候应该有空格。

当n=3,j<(n-i=3-3)

当n=2,j<(n-i=3-2=1) j=1 <1

算法如下:

/*** @author qing-feng.zhao*/public class SolutionOne {public static void main(String[] args) {int n=3;print(n);}public static void print(int n) {for (int i = n ; i >= 0; i--) {for (int j = 0; j <(n - i); j++) {System.out.print(" ");}for (int j = 0; j<(2 * i + 1); j++) {System.out.print("*");}System.out.println();}for (int i = 1 ; i <=n; i++) {for (int j = n-i; j >0; j--) {System.out.print(" ");}for (int j = 0; j<(2 * i + 1); j++) {System.out.print("*");}System.out.println();}}}

打印效果如下所示:

*******************************

1.2 打印相框

相框有n+2行,第1行和第n+2 行有n个*,他们之间有n-2个空格。(3<=n<20)

例如,当n=3 时候,输出内容如下:

***** ** ** ** *****

这道解题思路更加简单,首先最外层循环控制输出多少行,其次单独处理第一行和最后一行。

单独处理每一行的第一列和最后一列的字符,中间的全部设置为空格。

呐,算法解题如下:

/*** @author qing-feng.zhao*/public class SolutionTwo {public static void main(String[] args) {Solution(4);}public static void Solution(int n){if(n>=3&&n<20){for (int i = 1; i <= (n+2); i++) {if(i==1||i==(n+2)){for (int j = 0; j < n; j++) {System.out.print("*");}System.out.println();}else{for (int j = 0; j < n; j++) {if(j==0||j==(n-1)){System.out.print("*");}else{System.out.print(" ");}}System.out.println();}}}else{System.err.println("输入参数非法");}}}

输出结果如下:

***** ** ** ** *****

1.3 打印字母

1.3.1 打印字母一

打印m行n列矩阵,要求每一行每一列的字母都按照升序排序,第一行第一列的字母为A.

(0<=m<=10,0<=n<=16)

输出为m行,每行为n个按要求顺序排列的字符。

样例输入:

3 9

样例输出:

ABCDEFGHIBCDEFGHIJCDEFGHIJK

算法解决如下:

/*** @author qing-feng.zhao*/public class SolutionThree {public static void main(String[] args) {int m=3,n=9;Solution(m,n);}public static void Solution(int m,int n){char first='A';//控制输出多少行for (int i = 0; i < m; i++) {//控制每一行的每一列for (int j = 0; j < n ; j++) {//第一行第一列为Aif(i==0&&j==0){System.out.print(first);}else{//B =A+1first=(char)(first+1);System.out.print(first);}}System.out.println();first=(char)('A'+i);}}}

输出结果如下所示:

ABCDEFGHIBCDEFGHIJCDEFGHIJK

1.3.2 打印字母二

这个属于上面的题目变种,大致还是一样.

打印m行直角三角形,要求每一行和每一列的字母都按照字典升序排列,第一行的字母为A.第二行的字母为BC,第三行的字母为CDE.

样例输入:

5

样例输出:

ABCCDEDEFGEFGHI

算法解答如下:

/*** @author qing-feng.zhao*/public class SolutionFour {public static void main(String[] args) {int m=5;Solution(m);}public static void Solution(int m){char first='A';//控制输出多少行for (int i = 0; i < m; i++) {//第一行第一列为Aif(i==0){System.out.print(first);}else{//控制多少列for (int j = 0; j <(i+1); j++) {//B =A+1first=(char)(first+1);System.out.print(first);}}System.out.println();//每一个行的第一列字符// A = A+ 0;// B = A+1;// C= A+2;first=(char)('A'+i);}}}

输出结果如下:

ABCCDEDEFGEFGHI

1.4 分数名次统计

假设有这么一个数组,int[] nums={88,86,87,88,89,99,89};

第一个是自己的成绩,请设计一个程序计算自己的名次。

测试输入:

788,86,87,88,89,99,89

测试输出:

第3名

这道题的解题思路是首先数组按照冒泡排序,排序之后成绩从小到大进行排序。

然后反向遍历成绩数组,也就是成绩从大到小开始检查,自己的成绩肯定在这个数组里。

如果两个人的分数相同,那么名次应该相同,否则名次需要累加。

当找到等于自己成绩的第一个元素的时候就将其名次输出。

解题算法如下:

/*** @author qing-feng.zhao*/public class Test {public static void main(String[] args) {int[] nums={88,86,87,88,89,99,89};Solution(nums);}public static void Solution(int[] nums){int currentScore=88;for(int i=0;i<nums.length;i++) {for(int j = 0;j<nums.length-1;j++) {if(nums[j]>nums[j+1]) {int temp=nums[j];nums[j]=nums[j+1];nums[j+1]=temp;}}}System.out.println();for (int i = (nums.length-1),j=1; i>=0 ; i--) {if(nums[i]!=nums[i-1]){j++;}if(nums[i]==currentScore){System.out.print("第"+(j)+"名");break;}}}}

输出效果如下:

第3名

如果觉得《Java算法篇之打印小星星和成绩名次统计》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。