C++或Java算法来个小比赛下,看谁最快+优。brainstorm

vcvj 2012-08-20 02:46:31
已知:
1.给定字符串如:x="236,7526,1.9|308,,3|1133,1133,1.3|4151,,3|4263,2322,1.8|4389,5779,3|4638,1123,2|5779,,3|5942,233,0.9|8116,,3";
2.字符串x内含10个或更多组数据以“|”相隔;
3.第组“a,b,c”串含3个顺序数据(b无则默认0)

用最少代码与轮询次数,得出:
========================
a!=b 的多少组 且 输出: a,b|a1,b1|...;
a==b 且 c>1.5的多少组 且 得到 按c 大小排序的数组: int i1[]{a,a1,a2...}; int i2[]{c, c1, c2...};

实现限定:
不用C++就标准C,Java不要用vector之类的,那太easy了。纯玩小算法

看谁实现精练,分给谁。
C/Java版各开50分。我觉得C版肯定快
http://topic.csdn.net/u/20120820/02/0e89d78c-fa95-434a-92f0-53903523773d.html?68237
...全文
257 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Younfor 2012-08-21
  • 打赏
  • 举报
回复
为啥我用slpit用不起
Youmiss1Love 2012-08-21
  • 打赏
  • 举报
回复
仅供参考

import java.util.LinkedList;
import java.util.List;

public class Demo {
private int[] a;
private int[] b;
private float[] c;
private int answer1;
private int answer2_1;
private float[][] answer2_2;

public static void main(String[] args) {
Demo d = new Demo();
String x="236,7526,1.9|308,,3|1133,1133,1.6|4151,,3|4263,4263,1.8|4389,5779,3|4638,1123,2|5779,,3|5942,233,0.9|8116,,3|8116,8116,3|8116,8116,3";
d.getDataFromStr(x);
d.getAnswer1();
d.getAnswer2_1();
d.printResult();
}

private void printResult() {
System.out.println("\n"+"a!=b的组数:"+answer1);
System.out.println("a==b 且 c>1.5的组数:"+answer2_1);
for(float[] f : answer2_2){
System.out.println(f[0]+" "+f[1]+" "+f[2]);
}
}

private void getAnswer2_1() {
int sum = 0;
List<Integer> indexs = new LinkedList<Integer>();
for(int index = 0, length = a.length; index < length; index ++){
if(a[index] == b[index] && c[index] > 1.5f){
indexs.add(index);
sum ++;
}
}
answer2_1 = sum;
int[] input = new int[sum];
for(int i = 0 ; i < sum; i++)
input[i] = indexs.get(i);

for (int j = 1; j < sum; j++) {
int key = input[j];
int index = binarySearch(input, c[key], 0, j - 1);
for (int i = j; i > index ; i--)
input[i] = input [i-1];
input[index] = key;
}
getAnswer2_2(input);
}

private void getAnswer2_2(int[] input) {
int length = input.length;
answer2_2 = new float[length][3];
for(int index = 0; index < length; index ++){
answer2_2[index][0] = a[input[index]];
answer2_2[index][1] = b[input[index]];
answer2_2[index][2] = c[input[index]];
}
}

private void getAnswer1(){
int sum = 0;
for(int index = 0, length = a.length; index < length; index ++){
if(a[index] != b[index]){
sum ++;
System.out.print(a[index]+","+b[index]+"|");
}
}
answer1 = sum;
}

private void getDataFromStr(String str){
String num[] = str.replaceAll("[|]", ",").split(",");
int len = num.length / 3;
a = new int[len];
b = new int[len];
c = new float[len];
for(int index=0,length=num.length,position=0;index < length;index+=3,position++){
a[position] = Integer.parseInt(num[index]);
b[position] = Integer.parseInt(num[index+1].equals("")?"0":num[index+1]);
c[position] = Float.parseFloat(num[index+2]);
}
}

private static int binarySearch(int[] input, float target, int from, int to)
{
int range = to - from;
if (range > 0){
int mid = (to + from) / 2;
if (input[mid] > target)
return binarySearch(input,target,from,mid-1);
else
return binarySearch(input,target,mid+1,to);
}else{
if (input[from] > target)
return from;
else
return from + 1;
}
}
}

//236,7526|308,0|4151,0|4389,5779|4638,1123|5779,0|5942,233|8116,0|
//a!=b的组数:8
//a==b 且 c>1.5的组数:4
//8116.0 8116.0 3.0
//8116.0 8116.0 3.0
//4263.0 4263.0 1.8
//1133.0 1133.0 1.6
vcvj 2012-08-21
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

你的中文表述能力太差了.
[/Quote]

这是在讨论算法,你做不出J歪什么?

我可不可以说“看你的英文名,我觉得你的英文差得可以?”
vcvj 2012-08-21
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

你的中文表述能力太差了.
[/Quote]
这是在讨论算法,你做不出7歪干什么?

我还说你的英文烂得可以
vcvj 2012-08-21
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

你的中文表述能力太差了.
[/Quote]
这是在讨论疑算法,你做不出7歪干什么?

我还说你的英文烂得可以
vcvj 2012-08-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

同学可以补习一下语文.
[/Quote]
麻烦你补下自己的算法。
zqfddqr 2012-08-20
  • 打赏
  • 举报
回复
这不肯定java慢了么acmjava都是加时的
willleung_0 2012-08-20
  • 打赏
  • 举报
回复
你的中文表述能力太差了.
willleung_0 2012-08-20
  • 打赏
  • 举报
回复
同学可以补习一下语文.

62,610

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧