日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

面试的算法2(C语言)(整理)

發(fā)布時(shí)間:2025/10/17 编程问答 9 豆豆
生活随笔 收集整理的這篇文章主要介紹了 面试的算法2(C语言)(整理) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
<pre name="code" class="cpp"><pre name="code" class="cpp">/* 寫(xiě)一個(gè)函數(shù),它的原形是int continumax(char *outputstr,char *intputstr) 功能:在字符串中找出連續(xù)最長(zhǎng)的數(shù)字串,并把這個(gè)串的長(zhǎng)度返回,并把這個(gè)最長(zhǎng)數(shù)字串付給其中一個(gè)函數(shù)參數(shù)outputstr所指內(nèi)存。例如:"abc123def123456eec123456789dd"的首地址傳給intputstr后,函數(shù)將返回9,outputstr所指的值為123456789。 */ #include <stdio.h> #include <stdlib.h> #include <string.h> //自己寫(xiě)的 把每個(gè)數(shù)字串都存下來(lái)再判斷 對(duì)于這道題的要求 略顯麻煩了 但如果要輸出每個(gè)數(shù)字串 可在這個(gè)基礎(chǔ)上改改就出來(lái)了 int FindMax_NumStr(char *outputstr,char *inputstr) {char *in = inputstr,*out = outputstr;int numcnt=0;//記錄數(shù)字串?dāng)?shù) 一共有多少次 int *count=(int*)malloc(10*sizeof(int));//存數(shù)字串的長(zhǎng)度char *temp[10];//存數(shù)字串的地址memset(count,0,10*sizeof(int));int max=0;//下標(biāo) 記錄最長(zhǎng)數(shù)字串int i;int flag=0;//flag 0:字母 1:數(shù)字if(*in>='0'&&*in<='9')flag=1;count--;//記錄每個(gè)數(shù)字串以及長(zhǎng)度while(*in!='\0'){while(*in>='0'&&*in<='9'){if(flag==0){count++;temp[numcnt]=in;numcnt++;flag=1;}if(flag==1){(*count)++;}in++;}//字母:in++;flag=0;}//比較count[],求最長(zhǎng)數(shù)字串count=(count-numcnt+1);max=numcnt-1;int tempnum=count[numcnt-1];for(i=0;i<numcnt-1;i++)if(count[i]>tempnum){max=i;tempnum=count[i];}/**(temp[max]+tempnum)='\0';outputstr=temp[max];*///保存最長(zhǎng)數(shù)字串for(i=0;i<tempnum;i++){*out=*temp[max];out++;temp[max]++;}*out='\0';return tempnum; }void main(void) {char input[]="abc123def123456eec123456789dd";char output[10];int maxlen;maxlen = FindMax_NumStr(output,input);printf("the str is :%s\n",output);printf("the maxlen is :%d\n",maxlen); }
//答案的 每次都先作比較 只保存一個(gè)最長(zhǎng)數(shù)字串 int FindMax_NumStr(char *outputstr,char *inputstr) {char *in = inputstr,*out = outputstr,*temp;char *final;int count = 0;int maxlen = 0;int i;while(*in!='\0'){if(*in > 47 && *in < 58){for(temp = in;*in> 47 && *in <58;in++)count++;}elsein++;if(maxlen < count){maxlen = count;count = 0;final = temp;}}for(i =0;i<maxlen;i++){*out = *final;out++;final++;}*out = '\0';return maxlen; } /* 求1000!的未尾有幾個(gè)0;求出1->1000里,能被5整除的數(shù)的個(gè)數(shù)n1,能被25整除的數(shù)的個(gè)數(shù)n2,能被125整除的數(shù)的個(gè)數(shù)n3,能被625整除的數(shù)的個(gè)數(shù)n4.1000!末尾的零的個(gè)數(shù)=n1+n2+n3+n4;只要是末尾是5的數(shù)它乘以一個(gè)偶數(shù)就會(huì)出現(xiàn)一個(gè)0,而末尾是0的數(shù)乘以任何數(shù)也都會(huì)出現(xiàn)0 而末尾是0的如果是一個(gè)0肯定能被5整除,兩個(gè)0肯定能被25整數(shù),以此類(lèi)推3個(gè)0就能被5的三次方整除,也就是1251000!就是1-1000數(shù)的相乘,能被5整除的所有數(shù)分別乘以一個(gè)偶數(shù)就會(huì)出現(xiàn)這些個(gè)的0,而例如100,既能被5整除,也能被25整除,所以就是兩個(gè)01000,既能被5,25,也能被125整除,所以算三個(gè)0例如是10!=1*2*3*4*5*6*7*8*9*10,里面有兩個(gè)數(shù)能被5整除,就是10和5,而 5隨便乘以一個(gè)偶數(shù)就出現(xiàn)一個(gè)0,而10乘以其它數(shù)也會(huì)出現(xiàn)一個(gè)0,所以10!會(huì)有兩個(gè)0 *///方法一: #include<stdio.h> #define NUM 1000void main() {int n1=0,n2=0,n3=0,n4=0;for(int i=5;i<=NUM;i=i+5){if((i>=5)&&(i%5==0))n1++;if((i>=25)&&(i%25==0))n2++;if((i>=125)&&(i%125==0))n3++;if((i>=625)&&(i%625==0))n4++;}printf("%d\r\n",n1+n2+n3+n4); }//方法二:遞歸 #include <stdio.h> #define NUM 1000int find5(int num) {int ret = 0;while(num%5==0){num/=5;ret++;}return ret; }void main(void) {int result = 0;int i;for(i=5;i<=NUM;i+=5)result +=find5(i);printf("the total zero number is %d\n",result); } /* 編寫(xiě)一個(gè) C 函數(shù),該函數(shù)在一個(gè)字符串中找到可能的最長(zhǎng)的子字符串,且該字符串是由同一字符組成的。 */ //dfggggsrer455555frtrrrtvvvwwwwwwf445t56 #include <stdio.h> #include <string.h> #include <stdlib.h> #define NUM 10 //類(lèi)似第一道的方法 每次比較 存出現(xiàn)次數(shù)最多的字符 char *find(char *str) {char finalch;//字符串字符char *final=(char*)malloc(NUM*sizeof(char));char ch;int i;int curcnt=0;int maxcnt=0;int flag=0;//第一個(gè)字符開(kāi)始標(biāo)志while(*str!='\0'){if(flag==0){ch=*str;curcnt++;flag=1;str++;}if(flag==1){while(*str==ch){curcnt++;str++;}flag=0;}if(curcnt>maxcnt){finalch=ch;maxcnt=curcnt;}curcnt=0;}for(i=0;i<maxcnt;i++){final[i]=finalch;}final[i]='\0';return final; }void main() {char str[]="dfggggsrer455555frtrrrtvvvwwwwwwf445t56";char *final;final=find(str);printf("最長(zhǎng)子串為:%s\r\n",final); }


總結(jié)

以上是生活随笔為你收集整理的面试的算法2(C语言)(整理)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。