一个关于数组输出的面试题,急

zenghuiss 2009-11-06 09:16:20
给出一组数 {A,2,3,4,5,6,7,8,9,10,J,Q,K}写算法找出顺子 ;顺子就是这样:A,2,3,4,5; 大于5个都算
请帮忙写下 谢谢了
...全文
188 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
ahhqcheng 2009-11-07
  • 打赏
  • 举报
回复
java code

public class Test {
public static void main(String[] args) {

int[] a = { 65, 2, 3, 4, 5, 6, 7, 8, 9, 10, 74, 81, 75 };

for (int k = 5; k < a.length + 1; k++) {

for (int j = k; j < a.length + 1; j++) {
for (int i = k - 5; i < j; i++) {
if (i == 0 || i == 10 || i == 11 || i == 12) {

System.out.print(getChar(a[i]));
} else {
System.out.print(a[i]);
}

}
System.out.println();
}
}

}

private static char getChar(int i) {
char a = (char) i;
return a;

}

}

/*
运行结果
* A2345
A23456
A234567
A2345678
A23456789
A2345678910
A2345678910J
A2345678910JQ
A2345678910JQK
23456
234567
2345678
23456789
2345678910
2345678910J
2345678910JQ
2345678910JQK
34567
345678
3456789
345678910
345678910J
345678910JQ
345678910JQK
45678
456789
45678910
45678910J
45678910JQ
45678910JQK
56789
5678910
5678910J
5678910JQ
5678910JQK
678910
678910J
678910JQ
678910JQK
78910J
78910JQ
78910JQK
8910JQ
8910JQK
910JQK
*/
ahhqcheng 2009-11-07
  • 打赏
  • 举报
回复
A2345
A23456
A234567
A2345678
A23456789
A2345678910
A2345678910J
A2345678910JQ
A2345678910JQK
23456
234567
2345678
23456789
2345678910
2345678910J
2345678910JQ
2345678910JQK
34567
345678
3456789
345678910
345678910J
345678910JQ
345678910JQK
45678
456789
45678910
45678910J
45678910JQ
45678910JQK
56789
5678910
5678910J
5678910JQ
5678910JQK
678910
678910J
678910JQ
678910JQK
78910J
78910JQ
78910JQK
8910JQ
8910JQK
910JQK
ahhqcheng 2009-11-07
  • 打赏
  • 举报
回复
public class Test {
public static void main(String[] args) {

int[] a = { 65, 2, 3, 4, 5, 6, 7, 8, 9, 10, 74, 81, 75 };

for (int k = 5; k < a.length + 1; k++) {

for (int j = k; j < a.length + 1; j++) {
for (int i = k - 5; i < j; i++) {
if (i == 0 || i == 10 || i == 11 || i == 12) {

System.out.print(getChar(a[i]));
} else {
System.out.print(a[i]);
}

}
System.out.println();
}
}

}

private static char getChar(int i) {
char a = (char) i;
return a;

}

}
wifewifewife 2009-11-07
  • 打赏
  • 举报
回复

public static void main(String[] args)
{
String[] s = new String[]{"A", "2", "4", "5", "6", "8", "9", "10", "J", "Q", "K"};
int[] arr = new int[s.length];

for (int i = 0; i < s.length; i++)
{
String s1 = s[i];
if (s1 == "A") s[i] = "1";
if (s1 == "J") s[i] = "11";
if (s1 == "Q") s[i] = "12";
if (s1 == "K") s[i] = "13";
arr[i] = Integer.valueOf(s[i]);//s数组放到arr数组中。
}
Arrays.sort(arr);

int count = 0;//计数
Set set = new HashSet();
for (int i = 0; i < arr.length; i++)
{
boolean b = compareTo(arr[i], arr[i + 1]);
if (b) {
set.add(arr[i]);
set.add(arr[i+1]);
count++;
if (count >= 5) {//当大于5才输出。
System.out.println(set);
}
} else {
set.clear();
count = 0;
}
}
}

private static boolean compareTo(int a, int b)
{
if (a + 1 == b){
return true;
} else {
return false;
}
}

A,J,Q,K没有换回来。自己换一下。
zenghuiss 2009-11-07
  • 打赏
  • 举报
回复
谢谢11楼的热心哥们了 都留qq帮我解决问题 结贴了 ~
风轻轻吹001 2009-11-07
  • 打赏
  • 举报
回复
L路过,帮顶一下!!!!!
bawgiitx 2009-11-06
  • 打赏
  • 举报
回复
先排序,从大到小,再找连继依次递减五次和以上的入队,得出的这些牌以所这些牌连续后面的四张就是顺了,一层循环就可以了
chenfeibiao328 2009-11-06
  • 打赏
  • 举报
回复
1、把给出的“牌号”放入一个数组里面
2、用“堆”把数组中最小的元素先放入堆,找到以这个最小元素为头的最长顺子。
3、如果这个顺子长度大于5,则可以设计一个读取的算法(读取的算法很简单,这里就不多说)。
4、找到数组中除刚才用到的数据以外的数据中最小的元素,放入“堆”中。
5、返回到2
这样就能找到所有的顺子了!
我QQ:623041460
要了解,可加我QQ!
zenghuiss 2009-11-06
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 lwuit 的回复:]
{A,2,3,4,5,6,7,8,9,10,J,Q,K}
如果J,Q,K,A,2 不是顺子那么就很好解决咯
最大的5位顺子是9,10,J,Q,K;
6位顺子是8,9,10,J,Q,K;
7位顺子……
8位……
9位……
10位……
……
13位…… 就是{A,2,3,4,5,6,7,8,9,10,J,Q,K}

我觉得稍微改下冒泡 就能实现了
[/Quote]
J,Q,K,A,2 这种不算
可能是我没表述清楚吧。。所有大于5的都算 就像
A,2,3,4,5
A,2,3,4,5,6
2,3,4,5,6 大于5个的都算 就类似于斗地主那样的连牌
tanwan 2009-11-06
  • 打赏
  • 举报
回复
排序+2层循环...

for(i=0;i<总个数;i++)
{
j=i;
temp=array[j++];
while(j<总个数)
{
if(temp+1!=array[j])
break;
else
{
temp+=1;
if(j-4==i)
break;
}
j++;
}
if(j-4==i)
{
for(k=i;k<j;k++)
System.out.println(k);
}
}
给LZ参考...
wifewifewife 2009-11-06
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 wifewifewife 的回复:]
lz.可不可以这样在这个数组中,把A替换成1,J,Q,K分别替换成11,12,13
再对这个数组比较一下,看后一下是不是比前一个大一。如果是且长度大于等于5就输出来。 但是后面那个数还比前面的大1,就接着往下比。直到不成为止,这时把这个数组输出来。再把A替换成1,J,Q,K分别替换成11,12,13替换回去。
[/Quote]
打错了。
在这个数组中,把A替换成1,J,Q,K分别替换成11,12,13
再对这个数组进行比较,看后一个是不是比前一个大1。如果是且长度大于等于5就输出来。 但是后面那个数还比前面的大1,就接着往下比。直到不成立为止,再把1,11,12,13替换回去。这时把这个数组输出来。
wifewifewife 2009-11-06
  • 打赏
  • 举报
回复
lz.可不可以这样在这个数组中,把A替换成1,J,Q,K分别替换成11,12,13
再对这个数组比较一下,看后一下是不是比前一个大一。如果是且长度大于等于5就输出来。 但是后面那个数还比前面的大1,就接着往下比。直到不成为止,这时把这个数组输出来。再把A替换成1,J,Q,K分别替换成11,12,13替换回去。
阁楼上的伟哥 2009-11-06
  • 打赏
  • 举报
回复
{A,2,3,4,5,6,7,8,9,10,J,Q,K}
如果J,Q,K,A,2 不是顺子那么就很好解决咯
最大的5位顺子是9,10,J,Q,K;
6位顺子是8,9,10,J,Q,K;
7位顺子……
8位……
9位……
10位……
……
13位…… 就是{A,2,3,4,5,6,7,8,9,10,J,Q,K}

我觉得稍微改下冒泡 就能实现了
tianzishuode4 2009-11-06
  • 打赏
  • 举报
回复
接3楼,若stack里面数量大于等于5并且当前数大于前一个数+1,则取出stack内所有数存放,然后继续
阁楼上的伟哥 2009-11-06
  • 打赏
  • 举报
回复
J,Q,K,A,2 这个是顺子吗?
tianzishuode4 2009-11-06
  • 打赏
  • 举报
回复
我有个想法....先按照非降序排列好,然后取最小的一个数A[0]入栈,若下一个数A[1]=A[0]+1,则 push A[1],若不等则清空stack,push A[2].......反复。排序完成后的复杂度不是很高貌似。。我新手,错了请放过我
zenghuiss 2009-11-06
  • 打赏
  • 举报
回复
是要把所有顺子都找出来。
amdgaming 2009-11-06
  • 打赏
  • 举报
回复
这个不简单吗?

后面一个 数 比前面 多1,循环一次 就 可以 判断 出来了

62,614

社区成员

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

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