Problem 1
问题描述
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标,要求第一个下标最小。注意,不能重复利用这个数组中同样的元素,假如不存在这样的两个整数,则返回两个-1。
Input
第一行两个整数,分别是target和数组nums的元素个数。
第二行是数组nums具体的每一个元素。
Output
输出目标元素的下标,要求下标由小到大排列。
Sample Input | Sample Output |
9 4 2 7 11 15 | 0 1 |
# include<iostream>
using namespace std;
int main()
{
int n,target;
cin>>target>>n;
int nums[n],flag=0;
for(int i=0; i<n; i++)
{
cin>>nums[i];
}
for(int i=0; flag==0&&i<n-1; i++)
{
for(int j=i+1; flag==0&&j<n; j++)
{
if(nums[i]+nums[j]==target)
{
cout<<i<<" "<<j<<endl;
flag=1;
}
}
}
if(flag==0) cout<<-1<<" "<<-1<<endl;
return 0;
}
Problem 2
Assignment Problem
将线性表(顺序存储)中前 m 个元素和后 n 个元素进行互换(m+n<length)。
注意算法的空间复杂度。
Input
第一行是线性表元素的个数,第二行是线性表内容,第三行分别是m和n。
Output
输出互换后的数组。
Sample Input | Sample Output |
10 1 2 3 4 5 6 7 8 9 10 3 4 | 7 8 9 10 4 5 6 1 2 3 |
# include<iostream>
using namespace std;
int main()
{
int l,m,n;
cin>>l;
int nums[l];
for(int i=0; i<l; i++)
{
cin>>nums[i];
}
cin>>m>>n;
for(int i=l-n; i<l; i++)
{
cout<<nums[i]<<endl;
}
for(int i=m; i<l-n; i++)
{
cout<<nums[i]<<endl;
}
for(int i=0; i<m; i++)
{
cout<<nums[i]<<endl;
}
return 0;
}
Problem 3
Assignment Problem
Input
输入包含多组数据。
第一行有一个整数N(0 <= N < 1000),表示课程的数目。
接下来N行,每行有两个整数S和T, (0 <= S < T <= 24), 表示该课程的开始时间和结束时间。
Output
输出一个整数代表最少需要多少讲师
Sample Input | Sample Output |
6 1 5 2 3 3 4 6 7 8 9 10 12 | 2 |
# include<iostream>
using namespace std;
int main()
{
int N,n=0,a;
cin>>N;
int S[N],T[N];
for(int i=0; i<N; i++)
{
cin>>S[i]>>T[i];
}
for(int i=0; i<N-1; i++)
{
for(int j=i+1; j<N; j++)
{
if(S[j]<S[i])
{
// 交换S和T
swap(S[i], S[j]);
swap(T[i], T[j]);
}
}
}
for(int i=0; i<N; i++)
{
if(S[i]!=-1)
{
n++;
a=T[i];
for(int j=i+1; j<N; j++)
{
if(S[j]>=a)
{
S[j]=-1;
a=T[j];
}
}
}
}
cout<<n<<endl;
return 0;
}