找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;
}