260928
如何用c语言实现随机取数
涉及头文件stdlib.h,调用函数rand(),rand()会直接给你一个随机整数,belike:
intn=rand();注意rand()给的数非常大,如果要减小的话就求余处理%
但是啊,会发现rand()每次生成的的数一摸一样,因为它是伪随机,他需要一个种子(seed)来生成这个数
但是rand()的参数列表(就是括号里填的内容)无法直接填参数,所以我们用到srand(填seed)(也在stdlib.h里面)
如果种子一样的话每次rand()生成的数还是一样的,所以我们需要每时每刻都不一样的时间(time)来实现seed的不同
time(NULL) 会返回当前时间(从 1970 年到现在过了多少秒),这个数每秒都在变
调用time()涉及头文件time.
rand无法用seed改计算起点。只能用srand
srand()需要的参数类型是unsigned int
完整代码belike:
#include<stdio.h>#include<stdlib.h>#include<time.h>intmain(){srand((unsigned)time(NULL));// 用当前时间当种子intn=rand()%100+1;printf("%d\n",n);return0;}关于time()函数
其返回类型是整数,所以需要类型强制转换才能给srand 打印它需要用%ld
它参数能填指针,但是我们只需要它直接给我当前时间,所以填空指针NULL
260929
打印*菱形(我感觉我写的相比ds写的也不遑多让好吧哈哈哈)
#include<stdio.h>intmain(){intn=0;printf("Enter n:\n");scanf("%d",&n);for(inta=n;a>0;a--){for(inti=0;i<a-1;i++){printf(" ");}for(intj=0;j<(n+1-a)*2-1;j++){printf("*");}printf("\n");}for(intb=n-1;b>0;b--){for(intk=0;k<n-b;k++){printf(" ");}for(intl=0;l<2*b-1;l++){printf("*");}printf("\n");}return0;}C 语言的 for 循环中,变量更新(如 i++)是在本次循环体执行完之后、下一次循环条件判断之前完成的!!!
261002
关于水仙花数
输出所有 3 位数中的"水仙花数"(各位数字立方和等于该数本身,如 153 = 1³+5³+3³)。进一步挑战:扩展到 n 位数(n 由用户输入),用循环实现通用的水仙花数判断。
拓展belike:
#include <stdio.h>
//这题一个很深的坑是我没理解水仙花数是n位就是n次方的和longlongncifang(intx,longlongn){longlonga=1;for(x;x>0;x--){a*=n;}returna;}intmain(){intn=0;printf("Enter n digits:\n");scanf("%d",&n);inttotal=0;intt=n;longlonghe=0;for(longlongi=ncifang(n-1,10);i<ncifang(n,10);i++)//三位数初始有100也就是10的2次方就够了。。。{he=0;//把之前累计的和清零,不然会干扰下一次计算验证longlongm=i;t=n;while(t>0){he+=ncifang(n,m/ncifang(t-1,10));m%=ncifang(t-1,10);t--;}if(he==i){printf("%lld ",i);total++;}if(total%5==0&&total!=0){printf("\n");}}return0;}这题一个很深的坑是我没理解水仙花数是n位就是n次方的和
还有就是涉及了哪些变量是在哪个区域内不能变、哪个区域内能变的问题,比如n的问题,得额外设置一个t来实现n的变化,但是要让n本身不变化
以及涉及了变量在循环内使用结束后是否清零的问题,比如he这个变量,如果不及时清零就会导致后面计算都是在上一个循环得到的he的基础上继续加,就不符合题意了
这些bug总感觉以后还会遇到。。。
261003
参加了Nefixst举办的嗷嗷嗷杯(点赞点赞
四个小时六题做了四题,虽然写的时候我没检查出问题,但是考完还是发现漏了很多条件(
素数和那道题感觉是我做的最好的,第一道比较成绩的又涉及盲点了,晚上看一下玩回来有没有时间补盲点,第五题虽然结果对了但是我给的数据类型是int,装不下那么大的数,可能改成long long就可以了,但是我的算法有点过于朴素耗时了,只拿了20分。。。其实第一题写的也是屎山代码
#include<stdio.h>intmain(){intk1=0;intk2=0;intk3=0;intk4=0;intk5=0;intk6=0;intk1r=0;intk2r=0;intk3r=0;intk4r=0;intk5r=0;intk6r=0;ints1=0;ints2=0;ints3=0;ints4=0;ints5=0;ints6=0;chars[100]="huanxin";inttotal_k=0;inttotal_s=0;intmaxr=0;intmaxs=0;intr=0;scanf("%s",&s);scanf(" %d %d %d",&k1,&s1,&k1r);scanf(" %d %d %d",&k2,&s2,&k2r);scanf(" %d %d %d",&k3,&s3,&k3r);scanf(" %d %d %d",&k4,&s4,&k4r);scanf(" %d %d %d",&k5,&s5,&k5r);scanf(" %d %d %d",&k6,&s6,&k6r);total_k=k1+k2+k3+k4+k5+k6;total_s=s1+s2+s3+s4+s5+s6;if(total_k>=total_s){printf("BJBL\n");}else{printf("Kiang Ah! %s!\n",s);if(k1r<=k2r){r=k1r;maxr=k1;maxs=s1;}else{r=k2r;maxr=k2;maxs=s2;}if(k3r<r){r=k3r;maxr=k3;maxs=s3;}if(k4r<r){r=k4r;maxr=k4;maxs=s4;}if(k5r<r){r=k5r;maxr=k5;maxs=s5;}if(k6r<r){r=k6r;maxr=k6;maxs=s6;}if(maxr>=maxs){printf("BJBL\n");}else{printf("Kiang Ah! %s!\n",s);}}return0;}真就纯屎山好吗