c语言中为数组随机赋值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言中为数组随机赋值相关的知识,希望对你有一定的参考价值。

已知一个6*6的二维数组,要求:
1,为它赋入1-36的随机值
2,数字不能重复
3,数组用e[i][j]表示
4,可以不用打印数组

//程序的思路是:数组的位置和要赋予的值都是二者都必须是随机产生的。否则做不到洗牌的效果

//首先随机产生数组行列的下标,然后判断该元素是否需要赋值

//确定需要赋值之后再产生1-36的随机数,判断产生的随机数是否已经存在

//不存在则将该位置赋值为这个数,存在则重新产生随机数,直到赋值成功。 

#include <stdio.h>

#include <stdlib.h>

#include <ctime>

int e[6][6]=0; //初值为0 

int find(int i,int j) 

//对产生的随机位置判断是否需要赋值 (返回0需要,返回1不需要) 

    if(e[i][j]!=0)  

    return 1;

    return 0;



int sure(int k)

//对产生的随机数字判断是否已经存在于数组当中(返回1存在,返回0不存在) 

     for(int  i=0;i<6;i++)

    

            for(int j=0;j<6;j++)

            

                    if(k==e[i][j])

                    return 1;

                         

            

    

    return 0;   



int main()



    int i;int j;int k;int n=0;

     srand((int)time(NULL));

    while(n<36)

    

               i=rand()%6;//产生随机位置 

               j=rand()%6;

               if(find(i,j)==0)//确定随机位置是否需要赋值,是0表示需要赋值 

               

                          while(1)//直到赋值成功结束 

                          

                                 k=rand()%36+1;//产生随机数量 

                                 if(sure(k)==0)//确定随机数量是否已经存在 

                                 

                                                e[i][j]=k;

                                                n++;

                                                break;

                                 

                               

                 

              // printf("%d ",n);     

    

     //printf("\\n");

    for(int i=0;i<6;i++)//输出 

    

            for(int j=0;j<6;j++)

            

                    printf("%2d  ",e[i][j]);

            

            printf("\\n");

    

    //getchar();

参考技术A //刚写的,测试通过,如果有疑问,欢迎交流
//思路是,保存一个1-36顺序存放的数组,然后每次随机的从这个数组里
//无放回的取数(也就是取出来一个数之后,从这个数组中删除)
//并把取出来的数,放入e[i][j]
//这样保证了1-36都出现且都只出现一次
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
//从输出中删除一个元素
void remove_tar(int * a, int tar_idx, int n)
while(tar_idx + 1 < n)
a[tar_idx] = a[tar_idx + 1];
tar_idx++;


int main()
srand(time(0));
int num_lib[36];
int e[6][6];
for(int i = 0; i < 36; i++)
num_lib[i] = i + 1;
int n = 36;
//洗牌的过程
for(int i = 0; i< 36; i++)
int cur_idx = rand()%n;
e[i/6][i%6] = num_lib[cur_idx];
remove_tar(num_lib, cur_idx, n);
n--;

//打印输出
for(int i = 0; i<6;i++)
for(int j = 0; j< 6; j++)
printf("%d ", e[i][j]);

printf("\\n");

return 0;

本回答被提问者和网友采纳
参考技术B #include <stdio.h>
#include <stdlib.h>
#include <time.h>
void swap( int & a, int & b)

    int t = a;
    a = b;
    b = t;

int main()

    int e[6][6];
    int tmp[36][2];
    int i,j;
    
    srand( (unsigned int )time(0));
    for( i = 0;i< 36;i++)
        tmp[i][0] = i+1, tmp[i][1] = rand();
    
    for( i = 0;i< 36;i++)
        
        int k = i;
        for( j= i+1 ;j<36;j++)
        
            if( tmp[i][1] > tmp[j][1] )
                k = j;
        
        if( k != i)
        
            swap( tmp[i][0],tmp[k][0]);
            swap( tmp[i][1],tmp[k][1]);
        
    
    
    int *p = (int*)e;
    for( i = 0;i< 36; i++,p++)
        *p = tmp[i][0],printf("%d  " ,tmp[i][0]);
        
    return 0; 

参考技术C 是随机位置赋值还是按顺序生成随机值?
随机位置赋值,相当于“洗牌”,就是1-36个数都要用上,顺序不定
按顺序生成随机值,会有重复数据出现,1-36不一定全出现。追问

随机位置赋值

追答#include<stdio.h>
#include<time.h>
#include<stdlib.h>

int main()
int i,j,n,t;
    int e[6][6]=0,*p; //数组初始化0
    srand(time(NULL));
p=(int*)e; //通过一维数组方式进行赋值,因为数组是连续存放的,这样操作方便。
    for( i = 1; i<= 36; i++)
n=rand()%36;
t=*(p+n) ; //备份随机位置上的数
*(p+n)=i; //随机位置赋值
if ( t ) //如果原位置上的数不是0

for( j=0;j<i;j++ ) //在0到当前位置上找个位置存放该数
if ( *(p+j)==0 )
break;
*(p+j)=t;

    

    for(i = 0; i<6;i++)
        for(j = 0; j< 6; j++)
            printf("%2d ", e[i][j]);
        
        printf("\\n");
    
    return 0;

在 Django 中为随机单词赋值

【中文标题】在 Django 中为随机单词赋值【英文标题】:Assigning value to a random word in Django 【发布时间】:2012-09-19 12:41:58 【问题描述】:

我需要一点帮助来做这件事。我创建了一个随机生成问题的民意调查,说“你喜欢‘蓝色’吗?”用户将从 1-5 对其进行评分。将出现一个新问题,例如“你觉得‘绿色’怎么样?” 单词是从数组中随机抽取的。

如何开始编写视图/模型来存储用户为每个单词选择的值? 输出应该是这样的(分数会为每种颜色取平均值):

Blue 3.4
Green 4.1
Red 2.8 

【问题讨论】:

【参考方案1】:

您可以创建一个模型来存储您的颜色:

class Color(models.Model):
    name = CharField(...)

并将您的颜色存储在那里。

要使其可评分,只需使用 Django 的出色评分插件之一,例如 django-ratings。当然你也可以创建自己的评分应用,但我认为互联网上已经有很多这样的应用了,为什么不使用一个呢?

【讨论】:

【参考方案2】:

本质上,您应该将颜色放在隐藏字段中或将其存储在会话中(参见https://docs.djangoproject.com/en/dev/topics/http/sessions/)

为了获得平均值,您的模型必须存储所有投票或存储当前平均值 + 到目前为止的投票数,以便您可以计算新的平均值

new_avg = ((old_avg * votes) + new_vote) / (votes++))

有关处理 POST 请求,请参阅https://docs.djangoproject.com/en/dev/ref/request-response/#django.http.HttpRequest.POST

【讨论】:

以上是关于c语言中为数组随机赋值的主要内容,如果未能解决你的问题,请参考以下文章

C语言一维数组赋值方法

C语言 如何将一个赋值过的数组置空

用C语言怎么输入为数组赋值,求代码

求 高手 C语言 数组和数组之间能直接赋值吗

C语言程序问题,数组元素无法赋值?请大家帮忙看看

求解 :C语言中 怎么把数组元素赋值为空字符?谢谢