搜狐9.13软件开发 编程题

1题
兄弟串
通过交换两个字符能得到的串称为兄弟串,判断两个字符串是否为兄弟串
AC
思路:判断两个字符串中相同位值不同的个数,将相应位置为*,若=2,则符合要求,
若!=2,则排序,若存在至少两个不为*的相同字符,则也符合要求
#include<bits/stdc++.h>
using namespace std;
int main(){
string a,b;
while(cin>>a>>b){
int count = 0;
bool flg = false;
if(a.size()!=b.size())
cout<<0<<endl;
else{
for(int i = 0;i<a.size();i++){
if(a[i]!=b[i]){
count++;
a[i] = '*';
b[i] = '*';
}
}
if(count==2)
flg = true;
else{
sort(a.begin(),a.end());
sort(b.begin(),b.end());
for(int i = 0;i<a.size()-1;i++){
if(a[i]==a[i+1]&&a[i]!='*'){
flg = true;
break;
}
}
}
if(flg)
cout<<1<<endl;
else
cout<<0<<endl;
}
}
system("pause");
return 0;
}

2题
计算移动次数
无限长的x轴,从坐标0开始,每次向左或向右移动,第n次移动就移动n
问移动到目的点的最少移动次数
AC
思路:1~k最大可以得到(1+k)*k/2;将n转为正数,因为n与-n的次数相同,只是镜像取正负;
使得(1+k)*k/2>=n,则(1+k)*k/2-n得到的是小于(1+k)*k/2的正数,若减完后是偶数x,
则可以通过调整1~k中若干个数ai+aj+ak+al....=x/2,将相应的+号转为-号,即可实现将结果-x,
也就是最小的移动次数
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
while(cin>>n){
int pos = 0;
if(n<0)
n = -n;
for(int i = 0;i<n+5;i++){
int temp = (1+i)*i/2;
if(temp>=n&&(temp-n)%2==0){  //temp>=n且减数为偶数
pos = i;
break;
}
}
cout<<pos<<endl;
}
system("pause");
return 0;
}

3题
比较版本号大小
判断两个版本号大小
AC
思路:将版本号补齐,直接比较字符串的大小
#include<bits/stdc++.h>
using namespace std;
int main(){
string a,b;
while(cin>>a>>b){
if(a.size()==1)
a+=".0.0.0";
else if(a.size()==3)
a+=".0.0";
else if(a.size()==5)
a+=".0";
if(b.size()==1)
b+=".0.0.0";
else if(b.size()==3)
b+=".0.0";
else if(b.size()==5)
b+=".0";

bool flg = a>b;
if(flg)
cout<<1<<endl;
else if(a==b)
cout<<0<<endl;
else
cout<<-1<<endl;
}
system("pause");
return 0;
}
#搜狐#
全部评论
class Solution:     def buddyStrings(self, A, B):         """         :type A: str         :type B: str         :rtype: bool         """         if len(A) != len(B):             return False         else:             count = 0             aa=[]             bb=[]             for i in range(len(A)):                 if A[i] != B[i]:                     count += 1                     aa.append(A[i])                     bb.append(B[i])             if count == 2:                 if list(reversed(bb)) == aa:                     return True                 else:                     return False             elif count == 0 and len(set(A)) != len(A):                  return True             else:                 return False #注意考虑 aab  和  aab这种情况也是可以的!两个字符串一样,但是 有重复的字符就可以! if list(reversed(bb)) == aa: 是为了避免 ab和 cd这种情况被判为True
点赞 回复 分享
发布于 2018-09-13 22:10
第二题用了n^2暴力,,一直47%。一开始没想通想试下x(x+1) retrun x或x+1,最后没试,可惜了。
点赞 回复 分享
发布于 2018-09-13 20:38
大佬请收下我的膝盖🐼
点赞 回复 分享
发布于 2018-09-13 20:41
好像第二题明白了,不过你为啥是< n + 5
点赞 回复 分享
发布于 2018-09-13 20:42
真的牛啊
点赞 回复 分享
发布于 2018-09-13 20:43
看不懂大神写的第二题....第二题不属于我
点赞 回复 分享
发布于 2018-09-13 20:51
蒂花之秀
点赞 回复 分享
发布于 2018-09-13 20:52
第一题没有问题吗?abc和ade好像在大佬的程序里也是输出1吧
点赞 回复 分享
发布于 2018-09-13 21:16
大佬,第二题的思路是你纯靠聪明才智想出来的?还是以前遇到过类似的编程题或者数学题呢?
点赞 回复 分享
发布于 2018-09-13 21:59

相关推荐

10-11 17:45
门头沟学院 Java
走吗:别怕 我以前也是这么认为 虽然一面就挂 但是颇有收获!
点赞 评论 收藏
分享
totoroyyw:千年老妖😂
投递华为等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务