考考你:用最少的代码判断一个数属于哪个集合

czcwzw 2010-03-17 09:09:30
假设有总共有10个数,分别是:
1,2,3,4,5,6,7,8,9,10
他们分成3个集合,分别为:
集合1:{1,3,7}
集合2:{2,4,5,8,10}
集合3:{6,9}
问题:如何判断一个随机的数:比如num=rand()%10+1;是否属于一个集合(这个集合也是随机产生的),比如:group=rand()%3+1;
要求:代码越精简越好;

void main()
{
int num = rand()%10+1;
int group =rand()%3+1;

//如何判断
}
...全文
226 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
visualassist4680 2010-03-18
  • 打赏
  • 举报
回复
long map[10] = {0,1,0,1,1,2,0,1,2,1};
int num = rand()%10;
int group =rand()%3;
cout << map[num] == group ? "in" : "out" << endl;

在简化就去掉变量的声明
WizardK 2010-03-18
  • 打赏
  • 举报
回复
原来变成无符号数,是想着要做位移的,现在不用了
WizardK 2010-03-18
  • 打赏
  • 举报
回复
[Quote=引用楼主 czcwzw 的回复:]
假设有总共有10个数,分别是:
1,2,3,4,5,6,7,8,9,10
他们分成3个集合,分别为:
集合1:{1,3,7}
集合2:{2,4,5,8,10}
集合3:{6,9}
问题:如何判断一个随机的数:比如num=rand()%10+1;是否属于一个集合(这个集合也是随机产生的),比如:group=rand()%3+1;
要求:代码越精简越好;

void main()
……
[/Quote]

1 1
3 11
7 111

2 10
4 100
5 101
8 1000
10 1010

6 110
9 1001
还以为你要问最快的方式,原来是代码最少


int i = rand() % 10 + 1;
unsigned long ul = i;

if (ul % 2 == 0)
printf("set 2\n");
else
if (ul % 3 == 0 && ul / 3 > 1)
printf("set 3\n");
else
printf("set 1\n");
SullenSun 2010-03-18
  • 打赏
  • 举报
回复
集合是随机产生的,应该要知道大小,再遍历集合。
VC_ZSY 2010-03-18
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 yxwsbobo 的回复:]

好吧,那就

分析 1 3 7 表示为 1000101 ==> 69
2 4 5 8 10 表示为 1010011010 ==> 666
6 9 ==> 100100000 ==> 288

已知
int num = rand()%10+1;
int group =rand()%3+1;




int Groups[3]={69,666,288};

puts(……
[/Quote]
正解
yxwsbobo 2010-03-18
  • 打赏
  • 举报
回复
int num = rand()%10+1;
int group =rand()%3+1;

此处从1开始,所以上面要减一也从0开始才行
yxwsbobo 2010-03-18
  • 打赏
  • 举报
回复
好吧,那就

分析 1 3 7 表示为 1000101 ==> 69
2 4 5 8 10 表示为 1010011010 ==> 666
6 9 ==> 100100000 ==> 288

已知
int num = rand()%10+1;
int group =rand()%3+1;




int Groups[3]={69,666,288};

puts(Groups[group]&(1<<num)?"yes":"no")
lonelyhacker 2010-03-18
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 yxwsbobo 的回复:]
C/C++ code

//初始化集合
int Group[10]={0};
for(int i=0;i!=5;++i)
Group[rand()%10] =1;//1是集合Group的编号,rand()%10+1 这个数属于这个集合

int num = rand()%10+1;


//判断这个数属于哪个集合
printf("is :%d",Group[num-1]);……
[/Quote]

同学你没弄清楚题哦。
LZ是问你
int num = rand()%10+1; //num的范围是从1到10随机选一个
int group =rand()%3+1; //group的范围是1-3随机选一个

他有三个集合在上面写着呢。。叫你判断num的数是否属于group这个集合里面的数。。
czcwzw 2010-03-18
  • 打赏
  • 举报
回复
还不是很精简
sk_sakula 2010-03-18
  • 打赏
  • 举报
回复
最笨的方法代码最少
也就是遍历这个些数
WizardK 2010-03-18
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 czcwzw 的回复:]

to 13楼:
if (ul % 2 == 0)
printf("set 2\n");
集合2还有一个5呢
[/Quote]

落了一个。。。
czcwzw 2010-03-18
  • 打赏
  • 举报
回复
个人愚见:

to 9楼的:
哇,很厉害.
这种方法在数不是很多的情况下,蛮好用的.
但是如果数很多,比如有255个数,那么就不能用了吧.


15楼的方法很好,而且也比较容易扩展,
czcwzw 2010-03-18
  • 打赏
  • 举报
回复
to 13楼:
if (ul % 2 == 0)
printf("set 2\n");
集合2还有一个5呢
McFlycobe 2010-03-17
  • 打赏
  • 举报
回复
int groupNum=0;
if (num==6||num==9)
{
groupNum=3;
}
else if (num==1||num==3||num==7)
{
groupNum=1;
}
else
{
groupNum=2;
}
if (group==groupNum)
{
cout<<" YES "<<endl;
}
else
cout<<" NO "<<endl;
czcwzw 2010-03-17
  • 打赏
  • 举报
回复
我没表述好:
问题:如何判断一个随机的数:比如num=rand()%10+1;是否属于一个集合(这个集合的集合号也是随机产生的),比如:group=rand()%3+1;group表示一个集合号
czcwzw 2010-03-17
  • 打赏
  • 举报
回复
int group =rand()%3+1;
表示集合的编号,
如果group=1;表示集合1:{1,3,7}
如果group=2;表示集合2:{2,4,5,8,10}
如果group=3;表示集合3:{6,9}

比如num=4;
group = 2;
那么程序的结论是:
4属于集合2;
yxwsbobo 2010-03-17
  • 打赏
  • 举报
回复

//初始化集合
int Group[10]={0};
for(int i=0;i!=5;++i)
Group[rand()%10] =1;//1是集合Group的编号,rand()%10+1 这个数属于这个集合

int num = rand()%10+1;


//判断这个数属于哪个集合
printf("is :%d",Group[num-1]);
yxwsbobo 2010-03-17
  • 打赏
  • 举报
回复
没说清楚吧

int group =rand()%3+1;

这是一个集合? 只有一个数啊 你的集合怎么随机的
stjay 2010-03-17
  • 打赏
  • 举报
回复
集合可用stl的set

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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