Class29

在这里插入图片描述
题目如上图所示:

这道题的重点是:如果一个数出现的次数大于一次,就在输出时使用复数"times"

首先,用户输入的数字并不知道有多少个,所以数组的长度就不容易确定,其次还要记录数字出现的次数,数组存储的每一个数字本身还要和这个数字出现的次数联系起来。不好操作。

解题思路:
既然是读取1~100之间的数字,且数组存储的数字本身还要和这个数字出现的次数联系起来。既然输入的数字个数不确定,导致数组长度不好确定,那就索性创建一个满足题意的最长的数组,创建一个长度为100的数组。
在这里插入图片描述
在这个数组中:
index为0的数组单元中存储数字1的出现的次数
index为1的数组单元中存储数字2的出现的次数

。。。。。。。。。。。

index为98的数组单元存储数字99的出现的次数
index为99的数组单元存储数字100的出现的次数

不难发现:
数组的角标和需要存储数字出现次数的这个数字存在关系,即角标+1=数字值,有了这个关系,就可以在知道角标、数字这两个其中一个的值时推算出另一个的值,这样的话,对应数组单元就可以利用来记录对应数字出现的次数,即数组单元存储的就是该数组单元角标对应的数字出现的次数。

代码:

import java.util.Scanner;

class Class29{
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        int[] intergers = new int[100];
        System.out.print("Enter the intergers between 1 and 100:");
        int digit = 0;
        while(true){ //不知道输入数字的个数,采用while循环
            digit = scanner.nextInt();
            if(digit==0){
                break; //如果输入的数字是0跳出循环,输入结束
            }
            // 假如digit是3,对应的数字就是2,所以是--digit,然后记录数字存储次数+1,即intergers[2]++
            intergers[--digit]++;
        }
        for(int i=0;i<intergers.length;i++){
            if(intergers[i]!=0){
                System.out.println((i+1)+" occurs "+intergers[i]+(intergers[i]>1?" times":" time"));
            }
        }
    }
}

运行结果:
在这里插入图片描述

发布了73 篇原创文章 · 获赞 7 · 访问量 3590

猜你喜欢

转载自blog.csdn.net/weixin_43801718/article/details/103050818