c语言中怎样在固定的几位数中随机选取其中的一位
以下代码能从0~9这10个数中随机选出3个数来。若有其他要求你可照猫画虎……
#include #include "stdlib.h"#include "time.h"int main(void){ int a[]={1,2,3,4,5,6,7,8,9,0},i,j,k,t; srand((unsigned)time(NULL)); for(k=10,i=0;i<3;i++){ printf("%d ",a[j=rand()%k]); t=a[--k],a[k]=a[j],a[j]=t; } printf("
"); return 0;}
下面是三种方式:
①通过模2除2(%2、/2)的方法
num%2——取出二进制的最后一位
num/2——右移去掉二进制的最后一位
通过while循环,依次取出二进制的最后一位数字判断是否为1,若为1则count++,while(num)只有当num变为0时循环结束。
问题:在测试-1出现bug,-1的二进制中应该有32个1,输出却为0。我们将-1带入代码中发现-1%2=0,count不增,然后-1/2=0,循环结束,故输出count的值为0。
解决方案:将变量num的数据类型改为unsigned int (无符号整型),此时表示的是正的整型的最大值,所以当num=-1时,表示二进制为32个1的正数,通过循环可以输出正确的个数。
②通过右移操作符(>>)、按位与操作符(&)实现
Example:当num=10(1010),通过右移操作num>>i,二进制向右移动i位。
//i=0,num>>0,右移0位,此时(1010)&(0001)=0
//i=1,num>>1,右移1位,此时(0101)&(0001)=1,count++
//i=2,num>>2,右移2位,此时(0010)&(0001)=0
//i=3,num>>3,右移3位,此时(0001)&(0001)=1,count++
……
因为二进制共32位,所以循环要执行32次后结束,得到count为2。
缺点:不够高效,必须循环32次。
③通过按位与操作符(&)巧妙运算实现
Example: 当num=15时,
1//num&(num-1)=(1111)&(1110)=(1110)
2//num&(num-1)=(1110)&(1101)=(1100)
3//num&(num-1)=(1100)&(1011)=(1000)
4//num&(num-1)=(1000)&(0111)=0 ,循环停止。共执行4次while循环。
扩展资料
一、指定的某一位数置1
宏 #define setbit(x,y) x|=(1<<y)
二、指定的某一位数置0
宏 #define clrbit(x,y) x&=~(1<<y)
三、指定的某一位数取反
宏 #define reversebit(x,y) x^=(1<<y)
四、获取的某一位的值
宏 #define getbit(x,y) ((x) >> (y)&1)
#include<stdio.h>
#include <string.h>
#include <time.h>
#include <stdlib.h>
main(void)
{
int nLen = 0;
char str[20] = {"5678"};
srand((unsigned)time(NULL));
printf("%c\n",str[(rand()%strlen(str))+1]);
}
c语言中怎样在固定的几位数中随机选取其中的一位
声明一个数组 。 然后数组里面写上你要的数字 。 最后用 rand()求余。 得到一个随机位置。 然后将其输出 就可以了的
用c语言编一个程序:从任意10个数中任选4个数并全输出?
random_shuffle(num.begin(), num.end());cout << "\\n中随机选出的4个数字为: " << endl;for(int i = 0; i < 4; ++i)cout << num[i] << ' ';cout << endl;}
c语言下,从1到100中选出40个不重复的整数,怎么实现(要具体代码)_百度...
在C语言中,可以使用数组和随机数生成函数实现从1到100中随机选择40个不重复的整数。具体步骤如下:1. 首先定义两个数组,一个用于存放1到100的整数,另一个用于存放最终结果。2. 使用for循环初始化存放1到100整数的数组。3. 使用srand函数初始化随机数种子,以确保每次运行程序时生成的随机数不同。4...
...一定要是3位 我是这样写的 四舍五入(取随机数(1,10)\/
朋友,必须三位的话,首先要保证个位不是0,所以单独随机,再随机十分位与百分位即可。代码如下:(取随机数 (0, 99) × 10 + 取随机数 (1, 9)) ÷ 1000 不需要四舍五入。效果图如下:附代码:计次循环首 (30, ) L = (取随机数 (0, 99) × 10 + 取随机数 (1, 9)) ÷ 1...
如何用c语言实现:定义一个1~100的int数组,随机从里边选择十个数字?
printf("输入元素个数");scanf("%d",&m);for(i = 0; i<m; ++i)scanf("%d",&a[i]);p=m;} void display(int *a, int *p){ int i;for(i = 0; i < *p; ++i)printf("%5d",a[i]);printf("\\n");} void main( ){ int a[10],n=0,m;do{ printf("1,输入数组\\n...
怎样在c语言中实现在0,1 这两个数种随机选取一个。
include include <stdlib.h> ...srand( (unsigned)time(NULL) ); \/\/随便调用一次。int getnum(){ return rand()%2;} 这样不断调用getnum()就会是0、1、0这样不停的随机选择下去。。
如何从100个数字中随机的选取不同的三个
dimension a(100) &&定义100个数,如果已经存在,想法存储到数组中 for i=1 to 100 a(i)=i endfor do while .t.a1=int(rand()*100)+1 &&随机生成三个下标,下标值在1-100之间 a2=int(rand()*100)+1 a3=int(rand()*100)+1 if a1<>a2 and a1<>a3 and a2<>a3 &&如果彼此都不...
编程,在0123456789 10个数中输入5个数随机组合,将所有一行五个数字的...
void main(){ int n[5];int t[5];for( int i = 0; i < 5; i++ ){ printf("请输入第%d个数字:",i);scanf("%d",n[i]); \/\/如果要求每次输入的数都不相同,请进行判断,这个都会的。} for( t[0] = 0; t[0]<5; t[0]++ ){ for( t[1] = 0; t[1]<5; t[1...
一个取随机数的问题!从1,2,3,4中抽取数字!用什么编程语言无所谓!
C语言的随机数产生可以通过random函数得到,设x=random() 那么x就是一个(0,1)的随机变量。再设一个变量 p4 表示 4 出现的概率 初始化时可以令 p4=1\/4 程序结构大致如此 a[]为结果序列 for (循环体根据你需要的数的长度得到){ x=random();\/\/得到一个随机数 若 0<x<p4 a[i]=4;若 ...
易语言如何在单击按钮之后编辑框输入5到8位的随机数字?
置随机种子数()编辑框1.内容=编辑框1.内容+#逗号+到文本(取随机数(10000,99999999))