#include
using namespace std;
int main()
{
int cards,sum1,sum2,sum3,sum4,sum5,sum,points;
char card1,card2,card3,card4,card5;
cout<<"how many cards you hold in hand?\n";
cin>>cards;
switch(cards)
{
case 2:
cout<<"please enter each one's points.1~9 fo r1~9,t for ten,j,k,q,a for J,K,Q,A.\n";
cin>>card1;
switch(card1)
{
case '1':
sum1=1;
break;
case '2':
sum1=2;
break;
case '3':
sum1=3;
break;
case '4':
sum1=4;
break;
case '5':
sum1=5;
break;
case '6':
sum1=6;
break;
case '7':
sum1=7;
break;
case '8':
sum1=8;
break;
case '9':
sum1=9;
break;
case 't':
case 'j':
case 'k':
case 'q':
sum1=10;
break;
case 'a':
sum1=11;
break;
}
cin>>card2;
switch(card2)
{
case '1':
sum2=1;
break;
case '2':
sum2=2;
break;
case '3':
sum2=3;
break;
case '4':
sum2=4;
break;
case '5':
sum2=5;
break;
case '6':
sum2=6;
break;
case '7':
sum2=7;
break;
case '8':
sum2=8;
break;
case '9':
sum2=9;
break;
case 't':
case 'j':
case 'k':
case 'q':
sum2=10;
break;
case 'a':
sum2=11;
break;
}
sum=sum1+sum2;
if(sum<=21)
{
cout<<"you got "<" points.";
}
else
{
cout<<"you got 12 points.";
}
break;
case 3:
cout<<"please enter each one's points.1~9 fo r1~9,t for ten,j,k,q,a for J,K,Q,A.\n";
cin>>card1;
switch(card1)
{
case '1':
sum1=1;
break;
case '2':
sum1=2;
break;
case '3':
sum1=3;
break;
case '4':
sum1=4;
break;
case '5':
sum1=5;
break;
case '6':
sum1=6;
break;
case '7':
sum1=7;
break;
case '8':
sum1=8;
break;
case '9':
sum1=9;
break;
case 't':
case 'j':
case 'k':
case 'q':
sum1=10;
break;
case 'a':
sum1=11;
break;
}
cin>>card2;
switch(card2)
{
case '1':
sum2=1;
break;
case '2':
sum2=2;
break;
case '3':
sum2=3;
break;
case '4':
sum2=4;
break;
case '5':
sum2=5;
break;
case '6':
sum2=6;
break;
case '7':
sum2=7;
break;
case '8':
sum2=8;
break;
case '9':
sum2=9;
break;
case 't':
case 'j':
case 'k':
case 'q':
sum2=10;
break;
case 'a':
sum2=11;
break;
}
cin>>card3;
switch(card3)
{
case '1':
sum3=1;
break;
case '2':
sum3=2;
break;
case '3':
sum3;
break;
case '4':
sum3=4;
break;
case '5':
sum3=5;
break;
case '6':
sum3=6;
break;
case '7':
sum3=7;
break;
case '8':
sum3=8;
break;
case '9':
sum3=9;
break;
case 't':
case 'j':
case 'k':
case 'q':
sum3=10;
break;
case 'a':
sum3=11;
break;
}
sum=sum1+sum2+sum3;
if((sum1==11&&sum2!=11&&sum3!=11)||(sum2==11&&sum1!=11&&sum3!=11)||(sum3==11&&sum2!=11&&sum1!=11))
{
if(sum>21)
{
points=sum-10;
cout<<"you got "<" points.";
}
else
{
cout<<"you got "<" points.";
}
}
else if(sum1!=11&&sum2!=11&&sum3!=11)
{
cout<<"you got "<" points.";
}
else if((sum1==11&&sum2==11&&sum3==11)||(sum1==10&&sum2==11&&sum3==11)||(sum1==11&&sum2==10&&sum3==11)||(sum1==11&&sum2==11&&sum3==10))
{
points=sum-20;
cout<<"you got "<" points.";
}
else
{
points=sum-10;
cout<<"you got "<" points.";
}
break;
case 4:
cout<<"please enter each one's points.1~9 fo r1~9,t for ten,j,k,q,a for J,K,Q,A.\n";
cin>>card1;
switch(card1)
{
case '1':
sum1=1;
break;
case '2':
sum1=2;
break;
case '3':
sum1=3;
break;
case '4':
sum1=4;
break;
case '5':
sum1=5;
break;
case '6':
sum1=6;
break;
case '7':
sum1=7;
break;
case '8':
sum1=8;
break;
case '9':
sum1=9;
break;
case 't':
case 'j':
case 'k':
case 'q':
sum1=10;
break;
case 'a':
sum1=11;
break;
}
cin>>card2;
switch(card2)
{
case '1':
sum2=1;
break;
case '2':
sum2=2;
break;
case '3':
sum2=3;
break;
case '4':
sum2=4;
break;
case '5':
sum2=5;
break;
case '6':
sum2=6;
break;
case '7':
sum2=7;
break;
case '8':
sum2=8;
break;
case '9':
sum2=9;
break;
case 't':
case 'j':
case 'k':
case 'q':
sum2=10;
break;
case 'a':
sum2=11;
break;
}
cin>>card3;
switch(card3)
{
case '1':
sum3=1;
break;
case '2':
sum3=2;
break;
case '3':
sum3;
break;
case '4':
sum3=4;
break;
case '5':
sum3=5;
break;
case '6':
sum3=6;
break;
case '7':
sum3=7;
break;
case '8':
sum3=8;
break;
case '9':
sum3=9;
break;
case 't':
case 'j':
case 'k':
case 'q':
sum3=10;
break;
case 'a':
sum3=11;
break;
}
cin>>card4;
switch(card4)
{
case '1':
sum4=1;
break;
case '2':
sum4=2;
break;
case '3':
sum4;
break;
case '4':
sum4=4;
break;
case '5':
sum4=5;
break;
case '6':
sum4=6;
break;
case '7':
sum4=7;
break;
case '8':
sum4=8;
break;
case '9':
sum4=9;
break;
case 't':
case 'j':
case 'k':
case 'q':
sum4=10;
break;
case 'a':
sum4=11;
break;
}
if(sum1!=11&&sum2!=11&&sum3!=11&sum4!=11)
{
cout<<"you got "<" points.";
}
else if((sum1==11&&sum2!=11&&sum3!=11&&sum4!=11)||(sum!=11&&sum2==11&&sum3!=11&&sum4!=11)||(sum1!=11&&sum2!=11&&sum3==11&&sum4!=11)||(sum1!=11&&sum2!=11&&sum3!=11&&sum4==11))
{
if(sum>21)
{
points=sum-10;
cout<<"you got "<" points.";
}
else
{
cout<<"you got "<" points.";
}
}
else if((sum1==11&&sum2==11&&sum3==11&&sum4!=11)||(sum==11&&sum2==11&&sum3!=11&&sum4==11)||(sum1==11&&sum2!=11&&sum==11&&sum4==11)||(sum1!=11&&sum2==11&&sum3==11&&sum4==11))
{
if(sum>=24&&sum<=31)
{
points=sum-10;
cout<<"you got "<" points.";
}
else
{
points=sum-20;
cout<<"you got "<" points.";
}
}
else if(sum1!=11&&sum2!=11&&sum3!=11&&sum4!=11)
{
cout<<"you got 14 points.";
}
else
{
if(sum>=35&&sum<=41)
{
points=sum-20;
cout<<"you got "<" points.";
}
else
{
points=sum-30;
cout<<"you got "<" points.";
}
}
break;
case 5:
cout<<"please enter each one's points.1~9 fo r1~9,t for ten,j,k,q,a for J,K,Q,A.\n";
cin>>card1;
switch(card1)
{
case '1':
sum1=1;
break;
case '2':
sum1=2;
break;
case '3':
sum1=3;
break;
case '4':
sum1=4;
break;
case '5':
sum1=5;
break;
case '6':
sum1=6;
break;
case '7':
sum1=7;
break;
case '8':
sum1=8;
break;
case '9':
sum1=9;
break;
case 't':
case 'j':
case 'k':
case 'q':
sum1=10;
break;
case 'a':
sum1=11;
break;
}
cin>>card2;
switch(card2)
{
case '1':
sum2=1;
break;
case '2':
sum2=2;
break;
case '3':
sum2=3;
break;
case '4':
sum2=4;
break;
case '5':
sum2=5;
break;
case '6':
sum2=6;
break;
case '7':
sum2=7;
break;
case '8':
sum2=8;
break;
case '9':
sum2=9;
break;
case 't':
case 'j':
case 'k':
case 'q':
sum2=10;
break;
case 'a':
sum2=11;
break;
}
cin>>card3;
switch(card3)
{
case '1':
sum3=1;
break;
case '2':
sum3=2;
break;
case '3':
sum3=3;
break;
case '4':
sum3=4;
break;
case '5':
sum3=5;
break;
case '6':
sum3=6;
break;
case '7':
sum3=7;
break;
case '8':
sum3=8;
break;
case '9':
sum3=9;
break;
case 't':
case 'j':
case 'k':
case 'q':
sum3=10;
break;
case 'a':
sum3=11;
break;
}
cin>>card4;
switch(card4)
{
case '1':
sum4=1;
break;
case '2':
sum4=2;
break;
case '3':
sum4=3;
break;
case '4':
sum4=4;
break;
case '5':
sum4=5;
break;
case '6':
sum4=6;
break;
case '7':
sum4=7;
break;
case '8':
sum4=8;
break;
case '9':
sum4=9;
break;
case 't':
case 'j':
case 'k':
case 'q':
sum4=10;
break;
case 'a':
sum4=11;
break;
}
cin>>card5;
switch(card5)
{
case '1':
sum5=1;
break;
case '2':
sum5=2;
break;
case '3':
sum5=3;
break;
case '4':
sum5=4;
break;
case '5':
sum5=5;
break;
case '6':
sum5=6;
break;
case '7':
sum5=7;
break;
case '8':
sum5=8;
break;
case '9':
sum5=9;
break;
case 't':
case 'j':
case 'k':
case 'q':
sum5=10;
break;
case 'a':
sum5=11;
break;
}
if(sum1!=11&&sum2!=11&&sum3!=11&sum4!=11&&sum5!=11)
{
cout<<"you got "<" points.";
}
else if((sum1==11&&sum2!=11&&sum3!=11&&sum4!=11&&sum5!=11)||(sum!=11&&sum2==11&&sum3!=11&&sum4!=11&&sum5!=11)||(sum1!=11&&sum2!=11&&sum3==11&&sum4!=11&&sum5!=11)||(sum1!=11&&sum2!=11&&sum3!=11&&sum4==11&&sum5!=11)||(sum1!=11&&sum2!=11&&sum3!=11&&sum4!=117&sum5==11))
{
if(sum>21)
{
points=sum-10;
cout<<"you got "<" points.";
}
else
{
cout<<"you got "<" points.";
}
}
else if((sum1==11&&sum2==11&&sum3==11&&sum4!=11&&sum5!=11)||(sum==11&&sum2==11&&sum3!=11&&sum4==11&&sum5!=11)||(sum1==11&&sum2!=11&&sum==11&&sum4==11&&sum5!=11)||(sum1!=11&&sum2==11&&sum3==11&&sum4==11&&sum5!=11)||(sum1!=11&&sum2!=11&&sum3==11&&sum4==11&&sum5==11)||(sum1!=11&&sum2==11&&sum3!=11&&sum4==11&&sum5==11)||(sum1!=11&&sum2==11&&sum3==11&&sum4!=11&&sum5==1)||(sum1==11&&sum2!=11&&sum3!=11&sum4==11&&sum5==11)||(sum1==11&&sum2!=11&&sum3==11&&sum4!=11&&sum5==11)||(sum1==11&&sum2==1&&sum3!=1&&sum4!=11&&sum5==11))
{
if(sum>=25&&sum<=31)
{
points=sum-10;
cout<<"you got "<" points.";
}
else
{
points=sum-20;
cout<<"you got "<" points.";
}
}
else if(sum1!=11&&sum2!=11&&sum3!=11&&sum4!=11&&sum5!=11)
{
cout<<"you got 15 points.";
}
else
{
if(sum>=35&&sum<=41)
{
points=sum-20;
cout<<"you got "<" points.";
}
else
{
points=sum-30;
cout<<"you got "<" points.";
}
}
break;
default:
cout<<"you only can take 2~5 cards.";
break;
}
}
运行后各种出错 同时也觉得自己写复杂了 求指点
老师看了想死的心都有了
typedef struct
{
char info; //关联字符信息
unsigned int weight; //每个节点的权值
unsigned int parent, lchild, rchild;
}HTNode,*HuffmanTree;
typedef char **HuffmanCode;
int n,*w;
char *info;
HuffmanTree HT; //存储哈弗曼树
HuffmanCode HC; //存储哈弗曼编码
void Select(HuffmanTree HT, int j,int &s1,int &s2)
{//选择双亲节点为0,并且最小的两个子叶节点
………..
}
void HuffmanCoding(HuffmanTree &HT, HuffmanCode &HC, int *w, int n,char *info) {
// 算法6.12
// w存放n个字符的权值(均>0),构造哈夫曼树HT,
// 并求出n个字符的哈夫曼编码HC
int i, j, m, s1, s2, start;
char *cd;
unsigned int c, f;
if (n<=1) return;
m = 2 * n - 1;
HT = (HuffmanTree)malloc((m+1) * sizeof(HTNode)); // 0号单元未用
for (i=1; i<=n; i++) { //初始化
HT[i].weight=w[i-1];
HT[i].info=info[i-1];
HT[i].parent=0;
HT[i].lchild=0;
HT[i].rchild=0;
}
for (i=n+1; i<=m; i++) { //初始化
HT[i].weight=0;
HT[i].parent=0;
HT[i].lchild=0;
HT[i].rchild=0;
}
printf("\n哈夫曼树的构造过程如下所示:\n");
printf("HT初态:\n 结点 weight parent lchild rchild");
for (i=1; i<=m; i++)
printf("\n%4d%8d%8d%8d%8d",i,HT[i].weight,
HT[i].parent,HT[i].lchild, HT[i].rchild);
printf(" 按任意键,继续 ...");
getch();
for (i=n+1; i<=m; i++) { // 建哈夫曼树
// 在HT[1..i-1]中选择parent为0且weight最小的两个结点,
// 其序号分别为s1和s2。
Select(HT, i-1, s1, s2);
HT[s1].parent = i; HT[s2].parent = i;
HT[i].lchild = s1; HT[i].rchild = s2;
HT[i].weight = HT[s1].weight + HT[s2].weight;
printf("\nselect: s1=%d s2=%d\n", s1, s2);
printf(" 结点 weight parent lchild rchild");
for (j=1; j<=i; j++)
printf("\n%4d%8d%8d%8d%8d",j,HT[j].weight,
HT[j].parent,HT[j].lchild, HT[j].rchild);
printf(" 按任意键,继续 ...");
getch();
}
//--- 从叶子到根逆向求每个字符的哈夫曼编码 ---
HC=(HuffmanCode)malloc((n+1)*sizeof(char *));
cd = (char *)malloc(n*sizeof(char)); // 分配求编码的工作空间
cd[n-1] = '\0'; // 编码结束符。
for (i=1; i<=n; ++i) { // 逐个字符求哈夫曼编码
start = n-1; // 编码结束符位置
for (c=i, f=HT[i].parent; f!=0; c=f, f=HT[f].parent)
// 从叶子到根逆向求编码
if (HT[f].lchild==c) cd[--start] = '0';
else cd[--start] = '1';
HC[i] = (char *)malloc((n-start)*sizeof(char));
// 为第i个字符编码分配空间
strcpy(HC[i], &cd[start]); // 从cd复制编码(串)到HC
}
free(cd); // 释放工作空间
} // HuffmanCoding
void CheckCoding()
{ // 将ToBeTra中的正文进行译码并存入CodeFile
……..
}
void HuffmanTranslate()
{ //将CodeFile中的代码进行译码并存入Textfile
…….
}
main()
{ printf("---------------------------------------------\n");
printf(" 赫夫曼编码和译码 \n");
printf(" 1.初始化 \n");
printf(" 2.输入对应的正文内容 \n") ;
printf(" 3.进行赫夫曼编码 \n");
printf(" 4.进行赫夫曼编码 \n") ;
printf(" 5.退出赫夫曼操作 \n");
printf(" 请输入1.2.3.4.5 \n");
printf(" ---------------------------------------------\n");
………
}