代码如下:
import java.util.Scanner; import java.util.Arrays; import java.util.ArrayList; public class Main { public static void main(String args[]) { Scanner sc = new Scanner(System.in); String n=sc.nextLine(); String inputString = sc.nextLine(); String stringArray[] = inputString.split(" "); //将输入数据读入到一个字符数组里去 int num[] = new int[stringArray.length]; //将输入的字符数组变成整型的数组 for (int i = 0; i < stringArray.length; i++) { num[i] = Integer.parseInt(stringArray[i]); } int n1=stringArray.length; int result[]=new int[n1]; for(int k=0;k<n1;k++) { String stringArray1[] = stringArray[k].split(""); //字符数组的一个字符串123 转换成[1 2 3] int num1[] = new int[stringArray1.length]; for (int i = 0; i < stringArray1.length; i++) { num1[i] = Integer.parseInt(stringArray1[i]); result[k]=result[k]+num1[i]; } } //计算是否相等 Arrays.sort(result); ArrayList arrayList=new ArrayList(); for(int i=0;i<n1;i++){ if(arrayList.contains(result[i])){ ; } else{ arrayList.add(result[i]); } } //输出list的大小 System.out.println(arrayList.size()); //遍历输出使用List之后的数组 for(int i=0;i<arrayList.size()-1;i++) { System.out.print(arrayList.get(i).toString()+" "); } System.out.print(arrayList.get(arrayList.size()-1).toString()); } }
提交结果如下:
解题思路:
我是比较笨的一种方法,主要是对于list等运用不是很熟悉,所以我读入数据和对数据进行分割采用的是数组的方式,我首先将123 899 51 998 27 33 36 12 键盘读入的时候存成String类型的数组,然后再对数组的每一个值采用split("")分割,目的是使得899 变成8 9 9 ,然后计算朋友数8+9+9=26,将26保存下来。再去分割51为5 1,然后再计算5+1=6,保存下来,依次类推。
所以我先对每一个几位数求出朋友数存在result数组里,然后对result采用sort排序,sort默认是升序排序,排序结果为:
3 6 6 6 9 9 26 26。这里要说对这样一个数组我想要剔除重复值然后输出,我用int型数组调半天无果,最后用list一下子解决了。
list的contain(o)函数,可以直接判断o是否在list中,这就很方便了。那就对result从前往后作为list.contain()的参数,如果list里面没有该元素,则添加,如果有该元素,则不添加,往后顺移,再判断。
最后要注意的是输出格式,输出要求最后一个数最后没有空格,所以list的最后一个元素要单独输出。