一个二维数组,里边是7行8列 里边的数据是 0到52,但是必须是随机排列的,每个数不能重复!
inta[7][8];staticintjsx;intmain(){intmain(){jsx=0;staticintx;srand((unsigned)time(NUL...
int a[7][8];
static int jsx;
int main(){
int main(){
jsx=0;
static int x;
srand((unsigned)time(NULL));
int nn[51]; //声明一个1为数组记录哪个没有用过
for(int i1=0;i1<51;i1++){
nn[i1]=i1;//赋值
jsx=i1;
}
for(int i=0;i<7;i++){
for(int j=0;j<8;j++){
x=rand()%51;
jsx=x;
if(nn[jsx]!=0){
a[i][j]=x;
nn[jsx]=100;
}else{
int ting=1;
while(ting!=0){
if(jsx<50){
jsx=jsx++;
jsx=rand()%51;
}else{
jsx=0;
}
if(nn[jsx]!=100){
a[i][j]=nn[jsx];
nn[jsx]=100;
ting=0;
}
}
}
}
}
//for(int i=0;i<4;i++){
// for(int j=0;j<7;j++){
// cout<<a[i][j]<<" ";
// }
// cout<<endl;
//}
return 0;
}
我做到这坐不下去了 老是有重复的 那位 好心大哥帮我看看逻辑到底错在那了!想了好长时间没想明白,跪求谢谢了! 展开
static int jsx;
int main(){
int main(){
jsx=0;
static int x;
srand((unsigned)time(NULL));
int nn[51]; //声明一个1为数组记录哪个没有用过
for(int i1=0;i1<51;i1++){
nn[i1]=i1;//赋值
jsx=i1;
}
for(int i=0;i<7;i++){
for(int j=0;j<8;j++){
x=rand()%51;
jsx=x;
if(nn[jsx]!=0){
a[i][j]=x;
nn[jsx]=100;
}else{
int ting=1;
while(ting!=0){
if(jsx<50){
jsx=jsx++;
jsx=rand()%51;
}else{
jsx=0;
}
if(nn[jsx]!=100){
a[i][j]=nn[jsx];
nn[jsx]=100;
ting=0;
}
}
}
}
}
//for(int i=0;i<4;i++){
// for(int j=0;j<7;j++){
// cout<<a[i][j]<<" ";
// }
// cout<<endl;
//}
return 0;
}
我做到这坐不下去了 老是有重复的 那位 好心大哥帮我看看逻辑到底错在那了!想了好长时间没想明白,跪求谢谢了! 展开
展开全部
原因很简单,7行8列是56个数据,你的程序里写的数据只有51个,那肯定要重复的。
你的 if(nn[jsx]!=0){ 这处判断是错的,应该是
if(nn[jsx]!=100){
当然改了以后,因为找不到不重复的数据来,会陷入死循环。
更好的方法是:先按顺序把数据填进去,然后随机选两个来交换。
int a[7][8];
int main()
{
srand((unsigned)time(NULL));
int i,j;
int *p = a[0];
for ( i=0;i<56;++i)
p[ i ] = i;
for ( i = 0; i < 56; ++i )
{
j = rand() % 56;
int temp = p[i];
p[i] = p[j];
p[j] = temp;
}
for(int i=0;i<7;i++)
{
for(int j=0;j<8;j++)
{
cout << setw( 2 ) << a[i][j] << " ";
}
cout<<endl;
}
return 0;
}
你的 if(nn[jsx]!=0){ 这处判断是错的,应该是
if(nn[jsx]!=100){
当然改了以后,因为找不到不重复的数据来,会陷入死循环。
更好的方法是:先按顺序把数据填进去,然后随机选两个来交换。
int a[7][8];
int main()
{
srand((unsigned)time(NULL));
int i,j;
int *p = a[0];
for ( i=0;i<56;++i)
p[ i ] = i;
for ( i = 0; i < 56; ++i )
{
j = rand() % 56;
int temp = p[i];
p[i] = p[j];
p[j] = temp;
}
for(int i=0;i<7;i++)
{
for(int j=0;j<8;j++)
{
cout << setw( 2 ) << a[i][j] << " ";
}
cout<<endl;
}
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你那个rand()函数是用来产生随机数的 。随机就有可能产生同样的值。
你应该用rand()产生的数做下标进行这个位置与另外一个rand()下标做交换
这样总是在0-52之间交换,不会有其他值。
你应该用rand()产生的数做下标进行这个位置与另外一个rand()下标做交换
这样总是在0-52之间交换,不会有其他值。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2011-02-23
展开全部
整套发牌洗牌代码 已发你 邮箱! 不满意 在M 我!
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询