找2編程
就像尋覓最大的數1樣,只是這時候你要設置兩個變數來標記最大數和次大數,具體代碼跟找最大數基本相同。
❷ c語言編程找 第二個大的數 怎麼弄
呵呵。這如戚是一個很經典渣沒陵的演算法。你網路一下找第K小或者第K大的數。去看看。
我分析下思路:
2輪冒泡,可以找出察拍第二大數。
2輪循環。也可以找出第二大的。
你要到公司面試,要講效率的話。可以看看我寫的下面這個代碼
這是用快速排序,夾逼原則來鎖定要找的第K大的元素
void swape(int *p1,int *p2)
{
int temp;
temp=*p1;
*p1=*p2;
*p2=temp;
}
int searchPosition(int a[10],int start,int end)
{
int pivot=a[start];
while(start<end)
{
while(start<end&&a[end]>=pivot)
end--;
if(start!=end)
{
swape(&a[start],&a[end]);
start++;
}
while(start<end&&a[start]<=pivot)
start++;
if(start!=end)
{
swape(&a[start],&a[end]);
end--;
}
}
return start;
}
int sloving(int a[10],int m)
{
int part=searchPosition(a,0,9);
while(m!=part+1)
{
if(m<part+1)
part=searchPosition(a,0,part);
else
part=searchPosition(a,part+1,9);
}
return part;
}
Dev-C++ 測試通的!
MIT演算法導論書上專門有討論的。好像是……&
❸ c語言編程二分查找
好久不寫了
寫一個程序,建立N元整型數組,然後輸入查找的整數x,查找x是否包含在數組中,查找用函數實現,若查找成功,返回x在數組中的第一次出現的下標,查找失敗,返回-1
源程序:
#include"stdio.h"
#define N 10
int locate(int a[N],int x)
{int h,r,m;
h=0;r=N-1;m=(h+r)/2;
while(h<=r&&x!=a[m])
if(x<a[m]) {r=m-1;m=(h+r)/2;}
else {h=m+1;m=(h+r)/2;}
if(h>r) return -1; /*查找失敗,返回-1*/
return m; /*查找成功,返回有效下標m */
}
void upinsert(int a[],int i) /*插入排序 (升序)*/
{int x,j;
x=a[i];j=i-1;
while(j>=0&&a[j]>x) {a[j+1]=a[j];j--;}
a[j+1]=x;
}
void main()
{int a[N],x,k,n;
printf("input %d integers:\n",N);
for(k=0;k<N;k++) {scanf("%d",a+k);upinsert(a,k);}
printf("input x=") ;scanf("%d",&x);
n=locate(a,x);
for(k=0;k<N;k++) printf("%4d",a[k]);
printf("\n fist position=%d\n",n);
}
沒有錯誤,我試過了
❹ c語言編程,找兩個字元串中同時出現的字元並輸出,急求,謝謝!
#include<stdio.h>
int main()
{int i,i1,i2,j,k;
char s[200]={0},s1[200],s2[200];
gets(s1);
gets(s2);
for(i=i1=i2=0;s1[i1];i1++)
{for(i=0;s[i];i++)
if(s[i]==s1[i1])
break;
if(s[i]==0)
{for(i2=0;s2[i2];i2++)
if(s2[i2]==s1[i1])
{s[i++]=s1[i1];break;}
}
}
握銀s[i]='純薯 '段褲宴;
printf("%s ",s);
return 0;
}