A12435
思路:只有4中情况:A1,A2翻转,其他正常,A2A3翻转其他正常.....为了下标与数字对应我开了6个空间,然后从1开始循环,到4截止,因为循环中有i+1害怕数组越界,如果索引出的数与下标不相等了,那就看看和下一个数是否是相反的关系,如果是就cnt++,i++,其中还要判断是否是唯一的一个相反的两个相邻的数,还要考虑特殊情况就是几不符合下标又不相邻的数互换位置达到升序。
看完官方题解后,其实不用那么麻烦,可以开两个数组,然后交换一下判断是否与标准输出相等即可
//官方代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
vector<int> a(5);
for (int &i : a)
cin >> i;
vector<int> ans = {1, 2, 3, 4, 5};
for (int i = 0; i < 4; i++)
{
vector<int> b = a;
swap(b[i], b[i + 1]);
if (b == ans)
{
cout << "Yes" << endl;
return 0;
}
}
cout << "No" << endl;
return 0;
}
//我的提交
#include <stdio.h>
int main()
{
int arr[6] = { 0 };
int cnt = 0;
int flag = 0;
for (int i = 1; i < 6; i++)
{
scanf("%d", &arr[i]);
}
for (int i = 1; i < 5;i++)
{
if (arr[i] != i)
{
if (arr[i] == i + 1 && arr[i + 1] == i)
{
i = i + 1;
cnt++;
if (cnt >= 2)
{
printf("No\n");
break;
}
}
else
{
flag = 1;
printf("No\n");
break;
}
}
}
if (cnt == 1)
{
printf("Yes\n");
}
if (cnt == 0&&flag==0)
{
printf("No\n");
}
return 0;
}
2.Geometric Sequence几何序列
本题题意就是判断一个序列是否是等比数列
思路:我一开始的思路就是等比数列嘛,就先以第一个数和第二个数的比值(大的比小的)为基准,然后我想计算机除法不是只能保留整数吗,所以我又把余数记录下来了,然后改了半天样例也没全部通过。。。。放弃了
官方题解:同时平方,将其转化为=
*
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
long long a[100];
bool flag=true;
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
}
for(int i=0;i<(n-2);i++){
if((a[i]*a[i+2])!=(a[i+1]*a[i+1]))flag=false;
}
if(flag)cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}