求个排序得算法 我写个扑克牌的排序算法,牌的数量从多到少,牌得大小按从大到小,比如最后排列成: 99997777JJJ666KK88Q573 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 LZ要的不是单纯的1单位的排序其中包含了 组合牌的排序比如333332222KKKKJJJQ54 可以先冒泡排序。3|5|666|7777|88|9999|JJJ|Q|KK。 排好后分组,一样大小的都放在一组。用结构体定义。struct{ int number; //用来存数值大小 int count; //用来存同样数字的个数 char* str; //存字符串}然后只要先根据count排序一次,然后根据number二次排序。最后把所有字符串拼起来应该就可以了吧。这只是个想法不一定对。 想了一下,前面的方法太笨不好。试着写了下面的。应该好多了。#include <string>using namespace std;void Sort(const char* str, char* result){ int buffer[13] = {0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e}; for (int i = 0; str[i]!= 0; i++) { switch(str[i]) { case '2': buffer[0]+= 0x10; break; case '3': buffer[1]+= 0x10; break; case '4': buffer[2]+= 0x10; break; case '5': buffer[3]+= 0x10; break; case '6': buffer[4]+= 0x10; break; case '7': buffer[5]+= 0x10; break; case '8': buffer[6]+= 0x10; break; case '9': buffer[7]+= 0x10; break; case '1': buffer[8]+= 0x10; i++; break; case 'J': buffer[9]+= 0x10; break; case 'Q': buffer[10]+= 0x10; break; case 'K': buffer[11]+= 0x10; break; case 'A': buffer[12]+= 0x10; break; } } int i,j,temp; bool done=false; j=1; while((j<13)&&(!done)) { done=true; for(i=0;i<13-j;i++) { if(buffer[i]>buffer[i+1]) { done=false; temp=buffer[i]; buffer[i]=buffer[i+1]; buffer[i+1]=temp; } } j++; } const char* Output[15] = {"", "", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"}; result[0]=0; for(i = 13; i > 0; i--) { while (buffer[i] > 0x10) { strcat(result,Output[buffer[i]&0x0f]); buffer[i] -= 0x10; } }}int _tmain(int argc, _TCHAR* argv[]){ char str[] = "99779771053JJ696J6KK88Q"; char result[256]; Sort(str, result); printf("%s\n",result); return 0;} 求推荐一本书!有关VC6.0写的ocx组件打包为CAB在网页中调用的! 第一次在csdn上发贴,散分 圆packing 和np 求教类的静态成员使用 谁知道ax后缀的文件是什么文件 COM入门问题,请高手请帮忙!(在线等) 如何使我的CStatic object 背景颜色和窗口的颜色一致,我窗口的颜色是白色的? 怎么找不到graphics.h?? 用过Windows XP的同志们麻烦过来看一下 小小小问题 如何提取TXT文件中符合要求的字符串??请教啊 ListBox 怎样得到 行数
比如333332222KKKKJJJQ54
struct
{
int number; //用来存数值大小
int count; //用来存同样数字的个数
char* str; //存字符串
}然后只要先根据count排序一次,然后根据number二次排序。最后把所有字符串拼起来应该就可以了吧。这只是个想法不一定对。
using namespace std;void Sort(const char* str, char* result)
{
int buffer[13] = {0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e};
for (int i = 0; str[i]!= 0; i++)
{
switch(str[i])
{
case '2':
buffer[0]+= 0x10; break;
case '3':
buffer[1]+= 0x10; break;
case '4':
buffer[2]+= 0x10; break;
case '5':
buffer[3]+= 0x10; break;
case '6':
buffer[4]+= 0x10; break;
case '7':
buffer[5]+= 0x10; break;
case '8':
buffer[6]+= 0x10; break;
case '9':
buffer[7]+= 0x10; break;
case '1':
buffer[8]+= 0x10; i++; break;
case 'J':
buffer[9]+= 0x10; break;
case 'Q':
buffer[10]+= 0x10; break;
case 'K':
buffer[11]+= 0x10; break;
case 'A':
buffer[12]+= 0x10; break;
}
} int i,j,temp;
bool done=false;
j=1;
while((j<13)&&(!done))
{
done=true;
for(i=0;i<13-j;i++)
{
if(buffer[i]>buffer[i+1])
{
done=false;
temp=buffer[i];
buffer[i]=buffer[i+1];
buffer[i+1]=temp;
}
}
j++;
} const char* Output[15] = {"", "", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"}; result[0]=0;
for(i = 13; i > 0; i--)
{
while (buffer[i] > 0x10)
{
strcat(result,Output[buffer[i]&0x0f]);
buffer[i] -= 0x10;
}
}}
int _tmain(int argc, _TCHAR* argv[])
{
char str[] = "99779771053JJ696J6KK88Q";
char result[256];
Sort(str, result);
printf("%s\n",result);
return 0;
}