第一章 绪论
1.循环左移
void reverseArr(int A[],int start,int rear)
{
for(int i=start,j=rear;i<=(start+rear)/2;i++,j++)
{
int temp=A[i];
A[i]=A[j];
A[j]=temp;
}
}
2.奇偶数排列
思路:分别设置工作指针i和j,i指向数组的低地址端,j指向数组的高地址端,一旦发现左边是偶数,右边是奇数,则发生交换。
void split(int A[],int n)
{
for(int i=0,j=n-1;i<j;i++,j--)
{ //前奇后偶,正常i++,j--
if(A[i]%2==0 && A[j]%2==1) //前偶后奇,交换位置
{
int temp=A[i];
A[i]=A[j];
A[j]=temp;
}
else if(A[i]%2==0 && A[j]%2==0) i--; //前偶后偶,i继续停留在原来位置,不能让i后移
else if(A[i]%2==1 && A[j]%2==1) j++; //前奇后奇,j继续停留在原来位置,不能让j前移
}
}
3.回文字符串
#include <iostream>
using namespace std;
bool judge(string str)
{
int n=str.length();
for(int i=0;i<n/2;i++)
{
if(str[i]==str[n-1]) n--; //从前往后,从后往前,一起遍历
else return false;
}
retrun true;
}
int main()
{
string s;
getline(cin,s);
bool res=judge(s);
if(res) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
return 0;
}
4.求最大值和次大值
#include <iostram>
using namespace std;
void getmax(int A[],int n,int &fmax,int &smax)
{
fmax=0;
smax=0;
for(int i=0;i<n;i++)
{
if(fmax<A[i])
{
smax=fmax;
fmax=A[i];
}
else if(smax<A[i]) //else if语句里,fmax>=A[i]
{
smax=A[i];
}
}
}
int main()
{
int n,maxV,nMax;
cin>>n;
int a[n];
for(int i=0;i<n;i++)
{
cin>>a[i];
}
getMax(a,n,maxV,nMax);
cout<<maxV<<" "<<nMax<<endl;
return 0;
}