给你一个顺序表a[],请找到
1-0 第一个x出现的位置,如果不存在,输出-1
1-1 前两个x出现的位置,如果只存在一个x,输出他的位置,如果一个都不存在,输出-1
1-2 查询最小/大元素所在的位置,如果多个最小/大值,输出第一个
1-3 查询次大/小值所在的位置。
2-0向顺序表a[]的第i个(下标从0开始)位置前插入一个元素x。如果插入位置太小输出-1,太大输出1,合法输出0并完成插入
代码1:(自己写的):
#include <stdio.h>
const int maxn = 100;
int finds(int a[],int n,int x)
{
int couter=0;
for(int i=1;i<=n;i++)
{
if((a[i]==x))
{
return i;
}
}
return -1;
}
void finds1(int a[],int n,int x)
{
int couter=0;
for(int i=1;i<=n;i++)
{
if((a[i]==x)&&(couter<2))
{
printf("%d ",i);
couter++;
}
}
if(!couter)
printf("-1");
}
int finds2(int a[],int n)
{
int site=1;
a[0]=a[1]; //设a[0]为最大元素,每个元素跟a[0]进行比较
for(int i=2;i<=n;i++)
{
if(a[0]<a[i])
{
a[0]=a[i];
site=i;
}
}
return site;
}
//max1和max2的值需要先做一个比较,以下代码未比较,待改正
/*int finds3(int a[],int n)
{
int b[3];
int max1=1,max2=2;
b[1]=a[1];
for(int i=2;i<=n;i++)
{
if(a[i]>b[1])
{
b[2]=b[1];
max2=max1;
b[1]=a[i];
max1=i;
}
else if(a[i]<b[1])
{
if(a[i]>b[2])
{
b[2]=a[i];
max2=i;
}
}
}
return max2;
}
*/
int main()
{
int a[maxn];
int n,x;
scanf("%d %d",&n,&x);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
// int ret=finds(a,n,x);
// printf("%d\n",ret);
// finds1(a,n,x);
// int maxs = finds2(a,n);
// printf("%d",maxs);
printf("%d",finds3(a,n));
return 0;
}
代码2:(西交wrong):
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <cmath>
#include <cstdlib>
#include <algorithm>
#include <vector>
#include <queue>
#include <stack>
#include <set>
#include <map>
using namespace std;
const int maxn = 100000;
typedef pair<int,int> P;
int findx(int a[],int n,int x)
{
for(int i=1;i<=n;i++)
if(a[i]==x) return i;
return -1;
}
void findxy(int a[],int n,int x,int &x1,int &x2)
{
bool cot=0;//当前出现了0个x
for(int i=1;i<=n;i++)
if(a[i]==x)
if(cot==0) {x1=i;cot=1;}
else
if(cot==1) {x2=i;return ;}
}
int findmax(int a[],int n)
{
int maxpos=1,maxnum=a[1];
for(int i=2;i<=n;i++)
if(a[i]>maxnum) {maxnum=a[i];maxpos=i;}
return maxpos;
}
int findmax2(int a[],int n)
{
//n
int max1=max(a[1],a[2]),max2=min(a[1],a[2]),pos1,pos2;
if(a[1]>a[2]) {pos1=1;pos2=2;}
else {pos1=2;pos2=1;}
for(int i=3;i<=n;i++)
{
if(a[i]>max1) {max2=max1;pos2=pos1;max1=a[i];pos1=i;}
else
if(a[i]==max1) continue;
else {
if(a[i]>max2){
pos2=i;
max2=a[i];
}
}
}
return pos2;
}
int insertList(int a[],int th,int n,int x)
{
if(th<1) return -1;
if(th>n) return 1;
for(int i=n;i>=th;i--)
a[i+1]=a[i];
a[th]=x;
return 0;
}
int main()
{
int a[maxn];
//1.0 第一个x出现的位置,如果不存在,输出-1
int n,x,y;
cin>>n>>x>>y;
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
//int res=findx(a,n,x);
//printf("%d\n",res);
/*
int x1=-1,x2=-1;
findxy(a,n,x,x1,x2);
if(x1==-1) printf("-1\n");
else
if(x2!=-1) printf("%d %d\n",x1,x2);
else printf("%d\n",x1);
*/
//printf("%d\n",findmax2(a,n));
cout<<insertList(a,x+1,n,y)<<endl;
for(int i=1;i<=n+1;i++)
cout<<a[i]<<" ";
cout<<endl;
return 0;
}
(感谢西交wrong学长提供以上题目练习)