国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

第一個(gè)1000行

2019-11-10 18:03:08
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
/*Author:MrBreadIntroduction:Aim to imPRove my programming ability and record my codes.Start date:Feb 5th,2017*/#include<stdio.h>#include<math.h>#include<time.h>#include<string.h> /* 2017-02-04 //第一個(gè)c語(yǔ)言程序 printf("Hello,World!/n"); return 0; *//* 2017-02-04 //求n! int n,i=2; double factorial=1;//防止溢出,盡可能使能表示盡可能大的值,要賦初值1 printf("請(qǐng)輸入1到50之間的整數(shù):/n"); scanf("%d",&n); //切不可忘記取地址符& if(n==1) { printf("The factorial is %d",1); return 0; } while(i<=n) { factorial*=i; //數(shù)據(jù)類型自動(dòng)轉(zhuǎn)換,從低精度自動(dòng)轉(zhuǎn)換成高精度 i++; } printf("The factorial is :%d!=%.0lf",n,factorial); return 0; *//*2017-02-04 //輸入三個(gè)數(shù)然后按從小到大輸出 int a,b,c,temp;//temp是在交換的中間值 printf("請(qǐng)輸入三個(gè)任意的整數(shù):/n"); scanf("%d%d%d",&a,&b,&c); //scanf("%d,%d,%d/n",&a,&b,&c)在輸入數(shù)據(jù)時(shí)要用逗號(hào)分隔 if(a>b) { temp=a; a=b; b=temp; } if(a>c) { temp=a; a=c; c=temp; } if(b>c) { temp=b; b=c; c=temp; } printf("從小到大的順序輸出:%d,%d,%d/n",a,b,c); return 0; *//* //猴子吃桃 //問(wèn)題描述:猴子每天吃蘋(píng)果的一半加一個(gè),第十天只剩下了一個(gè)蘋(píng)果。求第一天的蘋(píng)果總數(shù) int days=10,remain=1;//days代表天數(shù),remain代表第days天剩下的蘋(píng)果 int result=remain; while(days>=1) { printf("第%d天剩下的蘋(píng)果:%d 個(gè)/n",days,result); result=(result+1)*2; days--; } return 0; *//* //陽(yáng)陽(yáng)買蘋(píng)果 //問(wèn)題描述:陽(yáng)陽(yáng)每天買蘋(píng)果,每個(gè)蘋(píng)果0.8元,第一天買了兩個(gè)蘋(píng)果,之后每一天是前一天的一倍,直到總的蘋(píng)果個(gè)數(shù)為不超過(guò)100的最大值 //此時(shí)計(jì)算平均每天花多少錢買蘋(píng)果 int apple_sum=0; int everyday=2; //第一天買的蘋(píng)果個(gè)數(shù) int day=0; while(apple_sum<=100) { day++; apple_sum=apple_sum+everyday; everyday*=2; } float average=apple_sum*0.8/day; printf("平均每天花在蘋(píng)果上的錢為:%f",average); return 0;*//* //任意次方后的最后三位 //編程求一個(gè)整數(shù)任意次方的最后三位數(shù),即求x^y的最后三位數(shù),x和y的值由鍵盤(pán)輸入。 int x,y; long long result=1; //sizeof(long long)=8; printf("請(qǐng)輸出兩個(gè)整數(shù)x和y:/n"); scanf("%d%d",&x,&y); while(y--) { result=x*result; } printf("%d%d%d/n",result%1000/100,result%100/10,result%10); return 0; //考慮到溢出問(wèn)題,這里有一種方法可以避免這類問(wèn)題; //for(i=1;i<=y;i++) // z=z*x%1000; //if(z>100) // printf("%d",z); //else // printf("0%d",z);*//* //計(jì)算某日是該年的第幾天 int year,month,day,i; int run[12]={ //閏年各月份天數(shù) 31,29,31,30,31,30,31,31,30,31,30,31 }; int ping[12]={ //平年各月份天數(shù) 31,28,31,30,31,30,31,31,30,31,30,31 }; int result=0; //result代表該年的第幾天 printf("按照年月日的順序輸入,以逗號(hào)隔開(kāi):/n"); scanf("%d,%d,%d",&year,&month,&day); int flag;//設(shè)置為閏年標(biāo)志,若為閏年則flag=1; if(year%4==0&&year%100!=0||year%400==0) //閏年判斷條件,從左往右判斷 //若能被4整除而不能被100整除或者能被40整除 flag=1; else flag=0; if(flag)//若是閏年 { for(i=0;i<month-1;i++) result=result+run[i]; } else { for(i=0;i<month-1;i++) result=result+ping[i]; } result=result+day; printf("該日期為該年的第 %d 天/n",result); return 0; //思考:可以直接按照平年先計(jì)算天數(shù),再判斷月份是否大于3然后閏年只需要多加上一天即可*//* //2017-02-05 //婚禮上的謊言 //問(wèn)題描述:3對(duì)情侶參加婚禮,3個(gè)新郎為A,B,C,3個(gè)新娘為X,Y,Z,有人想知道究竟誰(shuí)與誰(shuí) //結(jié)婚,于是就問(wèn)新人中的三位,得到如下結(jié)果:A說(shuō)他將和X結(jié)婚;X說(shuō)她的未婚夫是C;C說(shuō)他將 //和Z結(jié)婚。這人事后知道他們?cè)陂_(kāi)玩笑,說(shuō)的全是假話。那么,究竟誰(shuí)與誰(shuí)結(jié)婚呢? //暴力解法 int a,b,c; for(a=1;a<=3;a++) for(b=1;b<=3;b++) for(c=1;c<=3;c++) if(a!=1&&c!=1&&c!=3&&a!=b&&a!=c&&b!=c) { printf("%c 將嫁給 A/n",'X'+a-1); printf("%c 將嫁給 B/n",'X'+b-1); printf("%c 將嫁給 C/n",'X'+c-1); } return 0;*//* 2017-02-06 //百元買百雞 //問(wèn)題描述:雞翁一,值錢5,雞母一,值錢三,雞雛三,值錢一,百元買百雞求各類雞的個(gè)數(shù)? int a,b,c;//a代表雞翁,b代表雞母,c代表雞雛 for(a=0;a<20;a++) for(b=0;b<34;b++) { c=100-a-b; //if(c%3==0) 再判斷錢數(shù)是否等于100,這樣后面就不用強(qiáng)制類型轉(zhuǎn)換 if(a*5+b*3+(float)c/3==100) //精度的問(wèn)題,c/3不一定為整數(shù),需要將其強(qiáng)制轉(zhuǎn)化為float型 printf("雞翁,雞母,雞雛的個(gè)數(shù)分別為:%d,%d,%d/n",a,b,c); } return 0;*//* //打魚(yú)曬網(wǎng)問(wèn)題 //如果一個(gè)漁夫從2011年1月一日開(kāi)始每三天打一次漁,兩天曬一次網(wǎng),編程實(shí)現(xiàn)當(dāng)輸入2011年以后的任意一天 //輸出該漁夫是在打漁還是曬網(wǎng)。 int year,month,day,i; int result=0; int ping[12]={ 31,28,31,30,31,30,31,31,30,31,30,31 }; printf("請(qǐng)輸入年月日,以逗號(hào)隔開(kāi)(2011年之后的任意一天):/n"); scanf("%d,%d,%d",&year,&month,&day); for(i=0;i<year-2011;i++) { if((i+2011)%4==0&&(i+2011)%100!=0||(i+2011)%400==0) //閏年判斷條件,從左往右判斷 result=result+366; else result=result+365; } for(i=0;i<month-1;i++) result=result+ping[i]; result=result+day; if((year%4==0&&year%100!=0||year%400==0)&&month>2) result=result+1; //若是閏年且月份大于2月則記上一天 //判斷打漁還是曬網(wǎng):以5為周期,取余判斷余數(shù) printf("天數(shù)=%d/n",result); if(result%5>0&&result%5<=3) //注意此處的判斷條件 printf("%d-%d-%d這一天在打漁/n",year,month,day); else printf("%d-%d-%d這一天在曬網(wǎng)/n",year,month,day); return 0;*//* //判斷三角形的類型 //根據(jù)輸入的三角形的三條邊判斷三角形的類型,并輸出它的面積和體積。 float a,b,c; float s,area; printf("請(qǐng)輸入三條邊長(zhǎng),以逗號(hào)隔開(kāi):/n"); scanf("%f,%f,%f",&a,&b,&c); //判斷三角形成立條件 if(a+b>c&&a+c>b&&b+c>a) { s=(a+b+c)/2; area=(float)sqrt(s*(s-a)*(s-b)*(s-c)); //需要添加頭文件math.h printf("構(gòu)成的三角形的面積是:%f/n",area); if(a==b&&a==c) { printf("構(gòu)成的三角形為等邊三角形/n"); } else if(a==b||a==c||b==c) { printf("構(gòu)成的三角形為等腰三角形/n"); } else if((a*a+b*b==c*c)||(a*a+c*c==b*b)||(b*b+c*c==a*a)) printf("構(gòu)成的三角形為直角三角形/n"); else printf("構(gòu)成的三角形為普通三角形/n"); } else printf("輸入的三條邊不能構(gòu)成三角形/n"); return 0;*//* //直接插入排序 //插入排序是把一個(gè)記錄插入到已排序的有序序列中,使整個(gè)序列在插入該記錄之后仍然有序 //插入排序中較簡(jiǎn)單的一種方法就是直接插入排序,其插入位置的確定方法是將待插入的記錄 //與有序區(qū)的各記錄自右向左依次比較其關(guān)鍵字的值的大小,本實(shí)例要求使用直接插入排序法將數(shù)字 //由小到大進(jìn)行排序 int a[50]; int i,j,k,temp; printf("請(qǐng)輸入十個(gè)整數(shù),以空格隔開(kāi):/n"); for(i=0;i<10;i++) scanf("%d",&a[i]); //進(jìn)行排序 printf("原始順序:/n"); for(i=0;i<10;i++) printf("%5d",a[i]); printf("/n"); //開(kāi)始排序 先就第一個(gè)元素是有序的,從第二個(gè)元素開(kāi)始進(jìn)行比較 int count=1; //count計(jì)算交換的次數(shù) for(i=1;i<10;i++) //進(jìn)行九輪遍歷 { //每一次遍歷之后序列都是有序的 for(j=0;j<i;j++) { if(a[j]>a[i]) //一碰到比自己大的數(shù)即進(jìn)行交換 { temp=a[j]; a[j]=a[i]; a[i]=temp; } printf("第%d次交換結(jié)果:/n",count); for(k=0;k<10;k++) printf("%5d",a[k]); printf("/n"); count++; } printf("第%d輪遍歷的結(jié)果為:/n",i); for(j=0;j<10;j++) printf("%5d",a[j]); printf("/n/n/n"); } */ /*//直接插入排序 //插入排序是把一個(gè)記錄插入到已排序的有序序列中,使整個(gè)序列在插入該記錄之后仍然有序 //插入排序中較簡(jiǎn)單的一種方法就是直接插入排序,其插入位置的確定方法是將待插入的記錄 //與有序區(qū)的各記錄自右向左依次比較其關(guān)鍵字的值的大小,本實(shí)例要求使用直接插入排序法將數(shù)字 //由小到大進(jìn)行排序void insort(int s[],int n) //自定義函數(shù)insort{ int i,j,k,count=1;//count計(jì)算交換的次數(shù) for(i=2;i<=n;i++)//數(shù)組下標(biāo)從2開(kāi)始,s[0]做監(jiān)視哨,s[1]一個(gè)數(shù)據(jù)無(wú)可比性 { s[0]=s[i]; //給監(jiān)視哨賦值 j=i-1; //確定要比較元素的最右邊的位置 while(s[0]<s[j]) { s[j+1]=s[j]; //數(shù)據(jù)右移 j--; //移向左邊的一個(gè)未比較的數(shù) //測(cè)試結(jié)果 // printf("第%d次中間結(jié)果:/n",count); // for(k=0;k<=10;k++) // printf("%5d",s[k]); // printf("/n"); // count++; } s[j+1]=s[0]; //在確定的位置插入s[i] printf("第%d次遍歷:/n",i-1); for(k=1;k<=10;k++) printf("%5d",s[k]); printf("/n"); }}void main(){ int a[11],i; //定義數(shù)組及變量為基本類型 printf("請(qǐng)輸入10個(gè)數(shù)據(jù):/n"); for(i=1;i<=10;i++) scanf("%d",&a[i]); printf("原始順序:/n"); for(i=1;i<11;i++) printf("%5d",a[i]); printf("/n"); insort(a,10); printf("/n插入數(shù)據(jù)后排序:/n"); for(i=1;i<11;i++) printf("%5d",a[i]); printf("/n");}*//* //希爾排序法 //希爾排序法又稱縮小增量法,屬于插入類排序,是將整個(gè)無(wú)序子序列分別進(jìn)行插入排序的方法 //先取一個(gè)整數(shù)d1<n,把所有序號(hào)相隔d1的數(shù)組元素放一組,組內(nèi)進(jìn)行直接插入排序;然后取d2<d1 //重復(fù)上述分組和排序操作;直至di=1.即所有記錄放進(jìn)一個(gè)組中排序?yàn)橹? void shsort(int s[],int n) //自定義函數(shù)shsort { int i,j,k,d; d=n/2; //確定固定增量值 while(d>=1) { for(i=d+1;i<=n;i++) //數(shù)組下標(biāo)從d+1開(kāi)始進(jìn)行直接插入排序 { s[0]=s[i]; //設(shè)置監(jiān)視哨 j=i-d; //確定要進(jìn)行比較的最右邊的元素 while((j>0)&&(s[0]<s[j])) { s[j+d]=s[j]; //數(shù)據(jù)右移 j=j-d; //向左移動(dòng)固定增量的位置 } s[j+d]=s[0]; //在確定的位置插入s[i] //測(cè)試 printf("輸出中間結(jié)果:/n"); for(k=1;k<=10;k++) printf("%5d",s[k]); printf("/n"); } d=d/2; } } void main() { int a[11],i; printf("請(qǐng)輸入10個(gè)整數(shù):/n"); for(i=1;i<=10;i++) scanf("%d",&a[i]); //從鍵盤(pán)中輸入十個(gè)數(shù)據(jù) shsort(a,10); printf("排序后的順序是:/n"); for(i=1;i<=10;i++) printf("%5d",a[i]); printf("/n"); }*//*//冒泡排序就是從第一個(gè)數(shù)開(kāi)始,依次與之后的數(shù)進(jìn)行比較,將最大的數(shù)移到最后,就像一個(gè)氣泡一樣一點(diǎn)一點(diǎn)往上浮void main(){ int i,j,k,temp,a[11]; printf("請(qǐng)輸入十個(gè)數(shù):/n"); for(i=1;i<11;i++) scanf("%d",&a[i]); for(i=1;i<11;i++) //變量i代表比較的趟數(shù) for(j=1;j<11-i;j++) //變量j代表每趟兩兩比較的次數(shù) { if(a[j]>a[j+1]) //如果前一個(gè)數(shù)比后一個(gè)數(shù)大則交換 { temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } printf("測(cè)試中間結(jié)果:/n"); for(k=1;k<11;k++) printf("%5d",a[k]); printf("/n"); } printf("排序后的順序是:/n"); for(i=1;i<=10;i++) printf("%5d",a[i]); printf("/n");}*//* //快速排序 //快速排序法是冒泡排序法的一種改進(jìn),主要的算法思想是在待排序的n個(gè)數(shù)據(jù)中取一個(gè)數(shù)據(jù)作為基準(zhǔn)值 //將所有記錄分為三組,使第一組各數(shù)據(jù)值均小于或等于基準(zhǔn)值,第二組做基準(zhǔn)值的數(shù)據(jù) //第三組各數(shù)據(jù)值均大于或等于基準(zhǔn)值,這便實(shí)現(xiàn)了第一趟分割,然后再對(duì)第一組和第三組分別重復(fù)上述 //方法,依次類推,直到每組中只有一個(gè)記錄為止void qusort(int s[],int start,int end){ int i,j; i=start; //將每組首個(gè)元素賦給i j=end; //將每組末尾元素賦給j s[0]=s[start]; //設(shè)置基準(zhǔn)值 while(i<j) { while(i<j&&s[0]<s[j]) j--; //位置左移 if(i<j) { s[i]=s[j]; //將小于或等于基準(zhǔn)值的s[j]放到s[i]的位置上 i++; //位置右移 } while(i<j&&s[i]<=s[0]) i++; //位置右移 if(i<j) { s[j]=s[i]; //將大于或等于基準(zhǔn)值的s[i]放到s[j]位置 j--; //位置左移 } } s[i]=s[0]; //將基準(zhǔn)放入指定位置 if(start<i) qusort(s,start,j-1); //將分割出的部分遞歸調(diào)用qusort函數(shù) if(i<end) qusort(s,j+1,end);}void main(){ int a[11],i; printf("請(qǐng)輸入10個(gè)數(shù):/n"); for(i=1;i<=10;i++) scanf("%d",&a[i]); qusort(a,1,10); //調(diào)用函數(shù)進(jìn)行排序 printf("排序后的順序是:/n"); for(i=1;i<=10;i++) printf("%5d",a[i]); printf("/n");}*///選擇排序法/*選擇排序的基本算法是從待排序的區(qū)間中經(jīng)過(guò)選擇和交換后選出最小的數(shù)值存放到a[1]中在從剩余的未排序區(qū)間中經(jīng)過(guò)選擇和交換后選出最小的數(shù)值存放到a[2]中,依此類推*//*void main(){ int i,j,t,a[11]; printf("請(qǐng)輸入十個(gè)整數(shù):/n"); for(i=1;i<11;i++) scanf("%d",&a[i]); for(i=1;i<=9;i++) //該循環(huán)是確定位置的,該位置是存放每次從待排序數(shù)列中經(jīng)選擇和交換后所選出的最小數(shù) for(j=i+1;j<=10;j++) //實(shí)現(xiàn)將確定位置上的數(shù)和后面待排序區(qū)間的數(shù)進(jìn)行比較的 if(a[i]>a[j]) //如果前一個(gè)數(shù)比后一個(gè)數(shù)大,則交換 { t=a[i]; a[i]=a[j]; a[j]=t; } printf("排序后的順序是:/n"); for(i=1;i<=10;i++) printf("%5d",a[i]); printf("/n");}*///歸并排序/*要點(diǎn):歸并是將兩個(gè)或多個(gè)有序記錄序列合并成一個(gè)有序數(shù)列。歸并方法有多種,一次對(duì)兩個(gè)有序記錄序列進(jìn)行歸并,稱為二路歸并排序,也有三路歸并排序及多路歸并排序。本實(shí)例是二路歸并排序。基本方法是:1、將n個(gè)記錄看成是n個(gè)長(zhǎng)度為1的有序子表2、將兩兩相鄰的有序子表進(jìn)行歸并3、重復(fù)執(zhí)行步驟2,知道歸并成一個(gè)長(zhǎng)度為n的有序子表*//*void merge(int r[],int s[],int x1,int x2,int x3) //實(shí)現(xiàn)一次歸并排序{ int i,j,k; i=x1; //第一部分的開(kāi)始位置 j=x2+1; //第二部分的開(kāi)始位置 k=x1; while((i<=x2)&&(j<=x3)) //當(dāng)i和j都在兩個(gè)要合并的部分中時(shí) //篩選兩部分中較小的元素放到數(shù)組s中 if(r[i]<=r[j]) { s[k]=r[i]; i++; k++; } else { s[k]=r[j]; j++; k++; } while(i<=x2) //將x1~x2范圍內(nèi)未比較的數(shù)順次加到數(shù)組r中 s[k++]=r[i++]; while(j<=x3) //將x2+1~x3范圍內(nèi)未比較的數(shù)順次加到數(shù)組r中 s[k++]=r[j++];}void merge_sort(int r[],int s[],int m,int n){ int p; int t[20]; if(m==n) s[m]=r[m]; else { p=(m+n)/2; merge_sort(r,t,m,p); //遞歸調(diào)用merge_sort()函數(shù)將r[m]~r[p]歸并成有序的t[m]~t[p] merge_sort(r,t,p+1,n); //遞歸調(diào)用merge_sort()函數(shù)將r[p+1]~r[n]歸并成有序的t[p+1]~t[n] merge(t,s,m,p,n); //調(diào)用函數(shù)將前兩部分歸并到s[m]~s[n] }}void main(){ int a[11]; int i; printf("請(qǐng)輸入10個(gè)數(shù):/n"); for(i=1;i<=10;i++) scanf("%d",&a[i]); merge_sort(a,a,1,10); printf("排序后的順序是:/n"); for(i=1;i<=10;i++) printf("%5d",a[i]); printf("/n");}*//* //二分查找 //二分查找就是折半查找,其基本思想就是;首先選取表中間位置的記錄,將其關(guān)鍵字與給定關(guān)鍵字key //進(jìn)行比較,若相等,則查找成功;若key的值比關(guān)鍵字值大,則要找的元素一定在右子表中,則繼續(xù)對(duì)右子表進(jìn)行折半查找; //若key的值比關(guān)鍵字值小,則要找的元素一定在左子表中,繼續(xù)對(duì)左子表進(jìn)行查找。如此類推,直到查找成功或查找失敗 //(查找范圍為0)void binary_search(int key,int a[],int n){ int low,high,mid,count=0,count1=0; low=0; high=n-1; while(low<high) //當(dāng)查找范圍不為0時(shí)執(zhí)行循環(huán)體語(yǔ)句 { count++; //count記錄查找次數(shù) mid=(low+high)/2; //求中間位置 if(key<a[mid]) //key小于中間值時(shí) high=mid-1; //確定左子表范圍 else if(key>a[mid]) //key大于中間值時(shí) low=mid+1; //確定右子表范圍 else if(key==a[mid]) //當(dāng)key等于中間值時(shí),證明查找成功 { printf("查找成功!/n查找 %d 次!a[%d]=%d/n",count,mid,key); //輸出查找次數(shù)及所查找元素在數(shù)組中的位置 count1++; //記錄查找成功的次數(shù) break; } //缺點(diǎn):這里寫(xiě)的只能查找成功一次而對(duì)于出現(xiàn)多次并不能查找出來(lái) } if(count1==0) //判斷是否查找失敗 printf("查找失敗!/n");}void main(){ int i,key,a[100],n; printf("請(qǐng)輸入數(shù)組的長(zhǎng)度:/n"); scanf("%d",&n); printf("請(qǐng)輸入數(shù)組元素:/n"); for(i=0;i<n;i++) scanf("%d",&a[i]); printf("請(qǐng)輸入你想查找的元素:/n"); scanf("%d",&key); binary_search(key,a,n); //調(diào)用函數(shù) printf("/n");}//需要改進(jìn)*//* //分塊查找 //分塊查找也稱為索引順序查找。要求將待查的元素均勻地分成塊,塊間按大小排序,塊內(nèi)不排序 //所以要建立一個(gè)塊的最大(或最小)關(guān)鍵字表,稱為索引表。 //本實(shí)例將給出的15個(gè)數(shù)按關(guān)鍵字大小分成了3塊,這15個(gè)數(shù)的排列是一個(gè)有序序列,也可以給出無(wú)序序列, //但必須滿足分在第一塊中的任意數(shù)都小于第二塊中的所有數(shù),第二塊中的所有數(shù)都小于第三塊中的所有數(shù)。 //當(dāng)要查找關(guān)鍵字為key的元素時(shí),先用順序查找在已建好的索引表中查出key所在的塊中,再在對(duì)應(yīng)的塊中順序查找key, //若key存在,則輸出其相應(yīng)的位置,否則輸出提示信息。 struct index //定義塊的結(jié)構(gòu) { int key; //塊的關(guān)鍵字 int start; //塊的起始值 int end; //塊的結(jié)束值 }index_table[4]; //定義結(jié)構(gòu)體數(shù)組 int block_search(int key,int a[]) //自定義實(shí)現(xiàn)分塊查找 { int i,j; i=1; while(i<=3&&key>index_table[i].key) //確定在哪個(gè)塊中 i++; if(i>3) //大于分得的塊數(shù),則返回0 return 0; j=index_table[i].start; //j等于塊范圍的起始值 while(j<=index_table[i].end&&a[j]!=key) //在確定的塊中順序查找 j++; if(j>index_table[i].end) //如果大于塊范圍的結(jié)束值,則說(shuō)明沒(méi)有要查找的數(shù),j置0 j=0; return j; }void main(){ int i,j=0,k,key,a[16]; printf("請(qǐng)輸入15個(gè)數(shù):/n"); for(i=1;i<16;i++) scanf("%d",&a[i]); for(i=1;i<=3;i++) { index_table[i].start=j+1; //確定每個(gè)塊范圍的起始值 j=j+1; index_table[i].end=j+4; //確定每個(gè)塊范圍的結(jié)束值 j=j+4; index_table[i].key=a[j]; //確定每個(gè)塊范圍中元素的最大值 } printf("請(qǐng)輸入你想查找的元素:/n"); scanf("%d",&key); k=block_search(key,a); if(k!=0) { printf("查找成功,其位置是:%d/n",k); //如果找到讀數(shù),則輸出其位置 } else printf("查找失效!/n"); //若未找到,則輸出提示信息}*//* //哈希查找 //要求如下:已知哈希表長(zhǎng)度為11,哈希表函數(shù)為H(key)=key%11,隨機(jī)產(chǎn)生待散列的小于50的8個(gè)元素 //同時(shí)采用線性探測(cè)再散列的方法處理沖突。任意輸入要查找的數(shù)據(jù),無(wú)論是否找到均給出提示信息。 #define max 11 #define N 8 int hashtable[max]; int func(int value) //用于返回哈希函數(shù)的值 { return value % max; //哈希函數(shù) } int search(int key) //實(shí)現(xiàn)哈希查找 { int pos,t; pos=func(key); //哈希函數(shù)確定位置 t=pos; //t存放確定出的位置 while(hashtable[t]!=key&&hashtable[t]!=-1) //如果該位置不等于要查找的關(guān)鍵字且不為空 { t=(t+1)%max; //利用線性探測(cè)求出下一個(gè)位置 if(pos==t) //如果經(jīng)多次探測(cè)又回到原來(lái)用哈希函數(shù)求出的位置,則說(shuō)明要查找的數(shù)不存在 return -1; } if(hashtable[t]==-1) //如果探測(cè)的位置是-1,則說(shuō)明要查找的數(shù)不存在 return NULL; else return t; } void creathash(int key) //自定義函數(shù)創(chuàng)建哈希表 { int pos,t; pos=func(key); //哈希函數(shù)確定元素的位置 t=pos; while(hashtable[t]!=-1) //如果該位置有元素存在,則進(jìn)行線性探測(cè)再散列 { t=(t+1)%max; if(pos==t) //如果沖突處理后確定的位置與原位置相同,則說(shuō)明哈希表已滿 { printf("哈希表已滿/n"); return ; } } hashtable[t]=key; //將元素放入確定的位置 } void main() { int flag[50]; int i,j,t; for(i=0;i<max;i++) hashtable[i]=-1; //在哈希表中,初始位置全置-1 for(i=0;i<50;i++) flag[i]=0; //50以內(nèi)所有數(shù)未產(chǎn)生時(shí),均標(biāo)志為0 srand((unsigned long)time(0));//利用系統(tǒng)時(shí)間做種子產(chǎn)生隨機(jī)數(shù) i=0; while(i!=N) { t=rand()%50; //產(chǎn)生一個(gè)50以內(nèi)的隨機(jī)數(shù)賦給t if(flag[t]==0) //查看是否產(chǎn)生過(guò)t { creathash(t); //調(diào)用函數(shù)創(chuàng)建哈希表 printf("%2d:",t); //輸出該元素 for(j=0;j<max;j++) printf("(%2d)",hashtable[j]); //輸出哈希表的內(nèi)容 printf("/n"); flag[t]=1; //將產(chǎn)生的這個(gè)數(shù)標(biāo)志為1 i++; } } printf("請(qǐng)輸入你想查找的元素:"); scanf("%d",&t); if(t>0&&t<50) { i=search(t); //調(diào)用search()函數(shù)進(jìn)行哈希查找 if(i!=-1) printf("查找成功!其位置是:%d/n",i); //若查找到該元素則輸出其位置 else printf("查找失敗!"); } else printf("輸入有誤!/n"); }*//*哈希函數(shù)的構(gòu)造方法常用的有5種,分別是數(shù)字分析法、平方取中法、分段疊加、偽隨機(jī)法和余數(shù)法,其中余數(shù)比較常用。因?yàn)楸緦?shí)例中已給出哈希函數(shù)所有不用構(gòu)造,直接按照題中給的哈希函數(shù)來(lái)運(yùn)算即可。雖然通過(guò)構(gòu)造好的哈希函數(shù)可以減少?zèng)_突,但沖突是不可能完全避免的,所以就相應(yīng)的產(chǎn)生了避免哈希沖突的常用的4種方法分別是開(kāi)放定址法(包括線性探測(cè)再散列和二次探測(cè)再散列)、鏈地址法、再哈希法和建立公共溢出區(qū)。開(kāi)放定址法中的線性再散列比較常用,該方法的特點(diǎn)是在沖突發(fā)生時(shí),順序查看表中的下一單元,直到找出一個(gè)空單元或查遍全表。*//* //斐波那契數(shù)列 //求數(shù)列的前30個(gè)元素,每行5個(gè)數(shù) void main() { long array[30]; array[0]=array[1]=1; int i; int count=0; //便于換行 for(i=2;i<30;i++) array[i]=array[i-1]+array[i-2]; printf("輸出斐波拉契數(shù)列的前三十個(gè)元素:/n"); for(i=0;i<30;i++) { count++; printf("%10d",array[i]); if(count==5) { printf("/n"); count=0; } } }*//* //哥德巴赫猜想 //驗(yàn)證100以內(nèi)的正偶數(shù)都能分解為兩個(gè)素?cái)?shù)之和,即驗(yàn)證哥德巴赫猜想對(duì)100以內(nèi)(大于2)的正偶數(shù) //成立 int ss(int i) //判斷是否為素?cái)?shù) { int j; if(i<=1) //小于1的數(shù)不是素?cái)?shù) return 0; if(i==2) //2是素?cái)?shù) return 1; for(j=2;j<i;j++) //對(duì)大于2的數(shù)進(jìn)行判斷 { if(i%j==0) return 0; else if(i!=j+1) continue; else return 1; } } void main() { int i,j,k,flag1,flag2,n=0; for(i=4;i<100;i+=2) for(k=2;k<=i/2;k++) { j=i-k; flag1=ss(k);//判斷拆分出的數(shù)是否是素?cái)?shù) if(flag1) { flag2=ss(j); if(flag2) //如果拆分出的兩個(gè)數(shù)均是素?cái)?shù)則輸出 { printf("%3d=%3d+%3d,",i,k,j); n++; if(n%5==0) printf("/n"); } } } printf("/n"); }*//* //尼科徹斯定理 //尼科徹斯定理的內(nèi)容是:任何一個(gè)整數(shù)的立方都可以寫(xiě)成一串連續(xù)奇數(shù)的和。編程驗(yàn)證該定理 void main() { int test; int i,j,k,l,flag=1; long long sum; long long result=1; printf("請(qǐng)輸入一個(gè)整數(shù):/n"); scanf("%d",&test); int count=3; while(count) { result=test*result; count--; } //result=test*test*test; printf("%d/n",result); //驗(yàn)證 i=result/2; if(i%2==0) i=i+1; //當(dāng)i為偶數(shù)時(shí)i值加一 while(flag==1&&i>=1) //當(dāng)i大于等于1且flag=1時(shí)還行循環(huán)體語(yǔ)句 { sum=0; k=0; while(1) { sum+=(i-2*k); //奇數(shù)累加求和 k++; if(sum==result) //如果sum與m相等,則輸出累加過(guò)程 { printf("%d*%d*%d=%d=",test,test,test,result); for(l=0;l<k-1;l++) printf("%d+",i-l*2); printf("%d/n",i-(k-1)*2); //輸出累加求和的最后一個(gè)數(shù) flag=0; break; } if(sum>result) break; } i-=2; //如果i等于下一個(gè)奇數(shù),則繼續(xù)上面的過(guò)程 } }*//*// 求100到200之間的素?cái)?shù)void main(){ int i,j,count=0; for(i=100;i<=200;i++) for(j=2;j<i;j++) //sqrt(i)可以縮短時(shí)間 { if(i%j==0) break; if(i==j+1) { printf("%5d",i); count++; if(count==5) { printf("/n"); count=0; } } }}*//*//十進(jìn)制轉(zhuǎn)換為二進(jìn)制void main(){ int test; int i,j,m; printf("請(qǐng)輸入一個(gè)十進(jìn)制數(shù)(0~32767):/n"); scanf("%d",&test); int a[16]={0}; //system("cls"); //清屏 for(m=0;m<15;m++) //for循環(huán)從0位到1位,最高位為符號(hào)位,本題始終為0 { i=test%2; //取2的余數(shù) j=test/2; //取被2整除的結(jié)果 test=j; //將得到的商賦給變量test a[m]=i; } for(m=15;m>=0;m--) { printf("%d",a[m]); if(m%4==0) printf(" "); //每輸出4個(gè)元素,輸出一個(gè)空格 } printf("/n");}*//*//n進(jìn)制轉(zhuǎn)換為十進(jìn)制//編程實(shí)現(xiàn)任意輸入一個(gè)數(shù),并輸入幾進(jìn)制,即將其轉(zhuǎn)換為十進(jìn)制數(shù)并輸出void main(){ long t1; int i,n,t,t3; char a[100]; printf("請(qǐng)輸入數(shù)字:/n"); gets(a); //輸入n進(jìn)制數(shù)存到數(shù)組a中 strupr(a); //將a中的小寫(xiě)字母轉(zhuǎn)換成大寫(xiě)字母 t3=strlen(a); //求數(shù)組a的長(zhǎng)度 t1=0;//為t1賦初值0 printf("請(qǐng)輸入進(jìn)制n(2或8或16):/n"); scanf("%d",&n); for(i=0;i<t3;i++) { if(a[i]-'0'>=n&&a[i]<'A'||a[i]-'A'+10>=n) //判斷輸入的數(shù)據(jù)與進(jìn)制數(shù)是否相符 { printf("輸入有誤!!/n"); //輸出錯(cuò)誤 exit(0); //退出程序 } if(a[i]>='0'&&a[i]<='9') //判斷是否為數(shù)字 t=a[i]-'0'; //求出該睡賦給t else if(n>=11&&(a[i]>='A')&&a[i]<='A'+n-10) //判斷是否為字母 t=a[i]-'A'+10; //求出字母所代表的十進(jìn)制數(shù) t1=t1*n+t; //求出最終轉(zhuǎn)換成的十進(jìn)制數(shù) } printf("十進(jìn)制形式是:/n%ld/n",t1);}*//*//小球下落問(wèn)題//以求從100米高度自由落下,每次落地后反跳回原高度的一半,再落下。求它在第十次落地時(shí),共經(jīng)過(guò)多少米?//第十次反彈多高void main(){ float high=100,sum=100; int i; for(i=1;i<=9;i++) { high=high/2; //每落地一次嘆氣高度變?yōu)樵瓉?lái)的一半 sum+=high*2; //累積的高度和加上下一次落地后彈起與下落的高度 } printf("總長(zhǎng)度是:%f/n",sum); printf("第十次落地后彈起的高度是:%f",high/2); printf("/n");}*///巧分蘋(píng)果/*一家農(nóng)戶以果園為生,一天,父親推出一車蘋(píng)果,共2520個(gè),準(zhǔn)備分給他的6個(gè)兒子。父親按事先寫(xiě)在一張紙上的數(shù)字把這堆蘋(píng)果分完,每個(gè)人分到的蘋(píng)果個(gè)數(shù)都不相同。他說(shuō):老大,把你分到蘋(píng)果的1/8給老二,老二拿到后,連同原來(lái)的蘋(píng)果分1/7給老三,老三拿到后,連同原來(lái)的蘋(píng)果的1/6給老四,以此類推,最后老六拿到后,連同原來(lái)的蘋(píng)果分1/3給老大,這樣,你們每個(gè)人分到的聘雇就一樣多了。問(wèn):兄弟六人原先各分到多少只蘋(píng)果?*//*void main(){ int a[6]={0}; int i; int average=2520/6; //首先計(jì)算出老六最后在給老大之前有多少蘋(píng)果 int temp=average*3/2; a[0]=(average-temp/3)*8/7; // 測(cè)試用printf("a[0]=%d/n",a[0]); a[1]=average*7/6-a[0]/8; // printf("a[1]=%d/n",a[1]); a[2]=average*6/5-average/6; a[3]=average*5/4-average/5; a[4]=average*4/3-average/4; a[5]=average*3/2-average/3; for(i=0;i<6;i++) printf("a[%d]= %d /n",i,a[i]);}*//*void main(){ int x[7],y[7],s,i; s=2520/6; //求出平均每個(gè)人要分多少個(gè)蘋(píng)果 for(i=2;i<=6;i++) //求老二到老六得到哥哥分來(lái)的蘋(píng)果卻未分給弟弟時(shí)的蘋(píng)果數(shù) y[i]=s*(9-i)/(8-i); y[1]=x[1]=(s-y[6]/3)*8/7; //老大得到老六分來(lái)的蘋(píng)果數(shù)卻未分給弟弟時(shí)的蘋(píng)果數(shù) for(i=2;i<=6;i++) x[i]=y[i]-y[i-1]/(10-i); //求原來(lái)每人得到的蘋(píng)果數(shù) for(i=1;i<=6;i++) printf("x[%d]=%d/n",i,x[i]);}*/
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 嘉义市| 清徐县| 东丽区| 同仁县| 罗源县| 兴海县| 饶平县| 永州市| 太仆寺旗| 景宁| 甘泉县| 宣城市| 岚皋县| 清水县| 永泰县| 和龙市| 丰都县| 富宁县| 册亨县| 长顺县| 衢州市| 黎城县| 泾川县| 平安县| 宾川县| 辉县市| 平舆县| 和平区| 岳阳市| 霍州市| 天柱县| 交口县| 屯留县| 九龙城区| 巴彦县| 友谊县| 墨玉县| 宣恩县| 浮山县| 富宁县| 新昌县|