枚举类型的问题?

CL1027 2010-08-14 09:30:47
/*口袋中有红,黄,蓝,白,黑5种颜色的球若干.每次从口袋中先后取出3个球,
问得到3种不同的球的可能取法,输出每种排列的情况.*/
#include <stdio.h>
void main()
{
enum color {red,yellow, blue,white,black};
enum color i,j,k,pri;
int n,loop;
n=0;
for(i=red;i<=black;(enum color)(i+1))
for(j=red;j<=black;(enum color)(j+1))
if(i!=j)
{
for(k=red;k<=black;(enum color)(k+1))
if((k!=i)&&(k!=j))
{
n=n+1;
printf("%-4d",n);
for(loop=1;loop<=3;loop++)
{
switch(loop)
{
case 1:pri=i;break;
case 2:pri=j;break;
case 3:pri=k;break;
default:break;
}

switch(pri)
{
case red: printf("%-10s","red");break;
case yellow:printf("%-10s","yellow");break;
case blue: printf("%-10s","blue");break;
case white: printf("%-10s","white");break;
case black: printf("%-10s","black");break;
default: break;

}
}
printf("\n");
}
}
printf("\ntotal:%5d\n",n);
}

为什么这个程序没有反应????
...全文
90 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zecard_fu 2010-08-15
  • 打赏
  • 举报
回复

#include <stdio.h>

int n = 5, m = 3; //5选3
int rcd[5], num[5] = {0, 1, 2, 3, 4};
char *color[] = {"red", "yellow", "white", "blue", "black"};

void selectNum(int l, int p)
{
int i;
if (l == m) {
for (i=0; i<m; i++) printf("%s\t", color[rcd[i]]);
printf("\n");
return;
}
for (i=p; i<=4; i++) {
rcd[l] = num[i];
selectNum(l+1, i+1);
}
}

int main(void)
{
selectNum(0, 0);
}

递归写的! 参考下吧!
winner8080 2010-08-14
  • 打赏
  • 举报
回复
编码习惯很重要,不要等到自己形成坏习惯的时候再慢慢去改,何不现在就端正呢.

可以看那些C语言经典著作,很多都是讲安全编码和编码习惯的.

另外,不要出现下面这种情况,正常的公司里的商业代码是不会这样,否则这个公司就太垃圾了.不过我确实见过,我干了90天就辞职了.没有规矩的公司,不习惯.
switch(loop)
{
case 1:pri=i;break;
case 2:pri=j;break;
case 3:pri=k;break;
default:break;
}

我是指这里的case 1,2,3,...
要不还要枚举干什么呢.\
明明可以做的更好.
canshui 2010-08-14
  • 打赏
  • 举报
回复
确实是谭浩强的,运行过得去的……
#include <stdio.h>
enum ball{red,yellow,white,blue,black};
void main()
{ enum ball i,j,k,p;
int count=0,loop;
for(i=red;i<=black;i++)
for(j=red;j<=black;j++)
if(i!=j)
{
for(k=red;k<=black;k++)
{ if(k!=j&&k!=i) {count++; //满足这个后才会进行下面的输出
for(loop=1;loop<=3;loop++)
{ //这个for结束后,就会产生三个球的颜色
switch(loop)
{case 1:p=i;break;
case 2:p=j;break;
case 3:p=k;break;
}
switch(p)
{case red:printf("red\t");break;
case yellow:printf("yellow\t");break;
case white:printf("white\t");break;
case blue:printf("blue\t");break;
case black:printf("black\t");break;
} //结束switch
}//结束for
printf("\n");
}//结束if
}//结束for
}
printf("\ntotal:%d\n",count);
}
chaoliu1024 2010-08-14
  • 打赏
  • 举报
回复
谭浩强书上的例题吧。。。
他书上写的编译器过不去。。。
skyworth98 2010-08-14
  • 打赏
  • 举报
回复
1. 理清自己的思路,想清楚自己想干什么。
2. 格式化你的程序。
3. 不要吝惜空行,括号。
4. 在开口问之前,先想清楚,自己要问什么……

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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