该帖已经被评为新手帖
|
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
作者 | 正文 | ||||||||||
发表时间:2011-04-07
最后修改:2011-04-07
有些细节问题要注意下的。例如:
如下表,1、2、3、4,排名前4位的数,出现的次数是相同的(只要存在排在第3位和第4位数字的次数相同就满足条件),怎么取3个呢?
如不考虑以上问题,第一反应是这么玩: sort -n t.dat | uniq -c | sort -rn | head -n 3 |
|||||||||||
返回顶楼 | |||||||||||
发表时间:2011-04-07
最后修改:2011-04-07
public static void main(String[] args) { } |
|||||||||||
返回顶楼 | |||||||||||
发表时间:2011-04-07
咋能把算法写成这样呢....find这么写就可以了
public static void find(int[] nums){ int sum [] = new int[10]; for (int i : nums) { sum[i]++; } findMax(sum); } |
|||||||||||
返回顶楼 | |||||||||||
发表时间:2011-04-07
最后修改:2011-04-07
这样行不行
List zero = new ArrayList(); zero.add(0); targetList.removeAll(zero); int countZero = 100 - list.size(); |
|||||||||||
返回顶楼 | |||||||||||
发表时间:2011-04-20
#include "stdafx.h" #include "stdafx.h" #include"iostream" #include "time.h" #define NUM 20 typedef int type ; using namespace std; struct All { int data; int num; }; int _tmain(int argc, _TCHAR* argv[]) { int a[NUM]; All c[10]; for(int i=0;i<10;i++) { c[i].data=i; c[i].num=0; } cout<<"数组为"<<endl; for(int i=0;i<NUM;i++) { a[i]=rand()%10; } for(int i=0;i<NUM;i++) { cout<<"a["<<i<<"]="<<a[i]<<endl; c[a[i]].num++; } cout<<"统计每个字符出现的位置:"<<endl; for(int i=0;i<10;i++) { cout<<c[i].data<<":"<<c[i].num<<endl; } return 0; } |
|||||||||||
返回顶楼 | |||||||||||
发表时间:2011-05-24
最后修改:2011-05-24
把数字和个数加入到Map中
然后对Map进行倒序排序,输出前3个 import java.util.*; import java.util.Map.*; public class FindMore { public static void main(String[] args) { int nums[] = new int[1000]; // 初始化数据,产生1000个0~9的数字. for (int i = 0; i < nums.length; i++) { Random m = new Random(); nums[i] = m.nextInt(10);// 随即产生0-9的数字,然后放入到数组中 } Map<Integer, Integer> maps = new HashMap<Integer, Integer>(); for (int i = 0; i < nums.length; i++) { int num = nums[i]; if (maps.get(num)==null) { maps.put(num, 1); }else{ maps.put(num, maps.get(num)+1); } } List<Map.Entry<Integer, Integer>> li = new ArrayList<Map.Entry<Integer,Integer>>(maps.entrySet()); Collections.sort(li, new Comparator<Map.Entry<Integer, Integer>>() { @Override public int compare(Entry<Integer, Integer> o1, Entry<Integer, Integer> o2) { // TODO Auto-generated method stub return o2.getValue()-o1.getValue(); } }); for (int i = 0; i < 10; i++) { System.out.println(li.get(i)); } } } 结果: 1=112 0=110 6=106 8=103 7=99 3=97 9=97 2=95 5=92 4=89 |
|||||||||||
返回顶楼 | |||||||||||
发表时间:2011-05-26
为什么不在生成1000个随机数(读取1000个随机数)的时候就做点手脚?而非要查找呢?
|
|||||||||||
返回顶楼 | |||||||||||
发表时间:2011-05-27
hubeen 写道 稍微改进一下吧,查找的时候没必要双重循环
public static void find(int[] nums){ int times[] = {0,1,2,3,4,5,6,7,8,9}; //存放出现的次数数组,数组的下标为0~9中数字.比如: sum[0]=5 表示0出现5次.sum[1]=8 表示1出现8次.依次类推. int sum [] = new int[times.length]; for (int i = 0; i < times.length; i++) { int k = 0; for (int j = 0; j < nums.length; j++) { if(times[i] == nums[j]){ k++; } } sum[i] = k; } findMax(sum); } 用一次循环就OK了 public static void find(int[] nums){ //存放出现的次数数组,数组的下标为0~9中数字.比如: sum[0]=5 表示0出现5次.sum[1]=8 表示1出现8次.依次类推. int sum[] = new int[10]; for (int j = 0; j < nums.length; j++) { sum[nums[i]]++; } findMax(sum); } 应该是sum[nums[j]]++; |
|||||||||||
返回顶楼 | |||||||||||
发表时间:2011-06-16
public class Test {
public static void main(String[] args) { Random random = new Random(); int[] num = new int[1000]; for (int i = 0; i < 1000; i++) { int result = random.nextInt(10); num[i] = result; } int count = 0; int[] max = new int[10]; for (int j = 0; j < 10; j++) { for (int z = 0; z < num.length; z++) { if (num[z] == j) { count++; max[j] = count; } } System.out.println(j + "出现过" + count + "次"); count = 0; } for (int i = 0; i < max.length - 1; i++) { for (int j = 0; j < max.length - i - 1; j++) { if (max[j] < max[j + 1]) { int temp = max[j]; max[j] = max[j + 1]; max[j + 1] = temp; } } } for (int k = 0; k < 3; k++) { System.out.println(max[k] + " "); } } } 也写了一个,不知道对不对。忘了注释! |
|||||||||||
返回顶楼 | |||||||||||
发表时间:2011-10-04
public class Practice { public static void main(String[] args) { // TODO Auto-generated method stub int[] nums = getNums(1000); int[] times = new int[]{0,0,0,0,0,0,0,0,0,0}; for (int i = 0; i < nums.length; i++) { System.out.print(nums[i] + ", "); switch (nums[i]) { case 0: times[0]++; break; case 1: times[1]++; break; case 2: times[2]++; break; case 3: times[3]++; break; case 4: times[4]++; break; case 5: times[5]++; break; case 6: times[6]++; break; case 7: times[7]++; break; case 8: times[8]++; break; case 9: times[9]++; break; } } System.out.println(); getThreeMax(times); } public static void getThreeMax(int[] times){ //做一个计算次数验证 int maxCount = 0; //打印各个数字出现的次数 for (int i = 0; i < times.length; i++) { maxCount += times[i]; System.out.println("数字\""+i+"\"出现的次数:"+ times[i]); } System.out.println("已经计算的次数:" + maxCount); //求出出现最多次数的三个数字 for(int i = 1; i<4; i++){ int maxKey = 0, maxValue = times[0]; for (int j = 0; j < times.length; j++) { if (maxValue < times[j]) { maxKey = j; maxValue = times[j]; } if (j == times.length-1) { times[maxKey] = 0; System.out.println("出现第" + i + "多的数为:" + maxKey + ",次数:" + maxValue); } } } } /* * 获得0-9范围内的n个随机数 */ private static int[] getNums(int n){ int[] results = new int[n]; //Random random = new Random(1); for (int i = 0; i < results.length; i++) { results[i] = (int) Math.round(Math.random()*9); } return results; } } 这是我的一个做法,欢迎大家指教。 ![]() |
|||||||||||
返回顶楼 | |||||||||||