科大讯飞7.31笔试思路
四道题全AC,分享一下自己的思路。
1.贪心算法,直接从最大面额开始求解
网上有类似
2.快速排序
#include <iostream>
#include<vector>
using namespace std;
void sort(vector<int>& arr,int left,int right)
{
if(left>=right)
return;
int tem=arr[left];
int i=left;
int j=right;
while(i!=j)
{
while(arr[j]>=tem&&i<j)
j--;
while(arr[i]<=tem&&i<j)
i++;
if(i!=j)
{
int k=arr[i];
arr[i]=arr[j];
arr[j]=k;
}
}
arr[left]=arr[i];
arr[i]=tem;
for(int k=0;k<arr.size();k++)
{
if(k==arr.size()-1)
cout<<arr[k]<<endl;
else
{
cout<<arr[k]<<" ";
}
}
sort(arr,left,i-1);
sort(arr,i+1,right);
}
int main()
{
int num;
vector<int> arr(num);
for(int i=0;i<num;i++)
cin>>arr[i];
sort(arr,0,arr.size()-1);
return 0;
}
3.相交条件:两个矩形的x和y的区间,都应该有交集
#include <iostream>
#include <vector>
using namespace std;
bool judge(pair<int,int>&s1,pair<int,int>&s2)
{
if((s1.second<s2.first)||(s2.second<s1.first))
return false;
return true;
}
int main()
{
vector<int> vec(8);
for(int i=0;i<8;i++)
cin>>vec[i];
vector<pair<int,int>> arr(4);
if(vec[0]>vec[2])
arr[0]=make_pair(vec[2],vec[0]);
else
{
arr[0]=make_pair(vec[0],vec[2]);
}
if(vec[1]>vec[3])
arr[1]=make_pair(vec[3],vec[1]);
else
{
arr[1]=make_pair(vec[1],vec[3]);
}
if(vec[4]>vec[6])
arr[2]=make_pair(vec[6],vec[4]);
else
{
arr[2]=make_pair(vec[4],vec[6]);
}
if(vec[5]>vec[7])
arr[3]=make_pair(vec[7],vec[5]);
else
{
arr[3]=make_pair(vec[5],vec[7]);
}
if(judge(arr[0],arr[2])&&judge(arr[1],arr[3]))
cout<<1<<endl;
else
{
cout<<-1<<endl;
}
return 0;
}
4.字符串转数字,一直向后寻找数字就行,然后累加
#include <iostream>
using namespace std;
int main()
{
string str;
getline(cin,str);
int i=0,flag=1;
long res=0;
while(str[i]==' ')
i++;
if(str[i]=='-')
flag=-1;
if(str[i]=='-'||str[i]=='+')
i++;
for(;i<str.size();i++)
{
if(isdigit(str[i]))
res=res*10+str[i]-'0';
if(res>=INT32_MAX&&flag==1)
{
cout<<INT32_MAX<<endl;
return 0;
}
if(res>INT32_MAX&&flag==-1)
{
cout<<INT32_MIN<<endl;
return 0;
}
}
cout<<res*flag<<endl;
return 0;
}

科大讯飞公司氛围 474人发布