一、第一道题目就是每次给你2n+2个的数字,除其中两个数字之外其他每个数字均出现两次,找到这两个数字并升序输出。但是这个数据范围比较大,达到26位,所以用常规的数据存储是做不到的,所以我们可以采用string类型来做,问题就可以简化不少,因为string可以直接判等,排序后寻找关系就可以啦!
代码:
#include<bits/stdc++.h>
using namespace std;
string a[50010],b;
int l=0,f=0;
int main()
{
while(cin>>b)
{
a[l++]=b;
}
sort(a,a+l);26wei1
for(int i=0;i<l;i++)
{
if(a[i]!=a[i+1]&&a[i]!=a[i-1])
{
if(!f)
{
cout<<a[i]<<" ";
f=1;
}
else cout<<a[i]<<endl;
}
}
return 0;
}
二、这是一道签到题,题目的意思就是有一条河,河中有n块石头,其中有一块石头松动,不可走,即第k块,现在从河的一边只能通过走石头到达对岸,每一步可以跨越 1 ~ 3 个石头。请问一共有多少种走法。思路当然就是用循环或者递归啦,找到方程很关键。根据画图找到关系dp[i]=dp[i-1]+dp[i-2]+dp[i-3],并且dp[k]=0。
代码如下:
#include<bits/stdc++.h>
using namespace std;
#define mod 998244353
long long dp[1000100];
int main()
{
int n,k;
while(cin>>n>>k)
{
dp[1]=1;
dp[2]=2;
dp[3]=4;
dp[k]=0;
for(int i=4;i<=n+2;i++)
{
dp[i]=dp[i-1]+dp[i-2]+dp[i-3];
}
cout<<dp[n]%mod<<endl;
}
return 0;
}