招商銀行信用卡中心2018秋招部分程式設計題彙總
阿新 • • 發佈:2019-01-04
1、給出一個非空的字串,判斷這個字串是否是由它的一個子串進行多次首尾拼接構成的。
例如,"abcabcabc"滿足條件,因為它是由"abc"首尾拼接而成的,而"abcab"則不滿足條件。
輸入描述:
非空字串
輸出描述:
如果字串滿足上述條件,則輸出最長的滿足條件的的子串;如果不滿足條件,則輸出false。
輸入例子1:
abcabc 輸出例子1: abc
#include <iostream> #include <string.h> using namespace std; int main() { int i,j,k; char s1[20],s2[20]; bool flag1=false,flag2=false; cin>>s1; for(i=0,j=strlen(s1)/2;i<strlen(s1)/2;i++,j++) { if(s1[i]!=s1[j]) { flag1=true; break; } } //cout<<"i,j,"<<i<<" "<<j<<endl; for(i=0,j=strlen(s1)/3,k=2*strlen(s1)/3;i<strlen(s1)/3;i+ +,j++,k++) { if(s1[i]!=s1[j] || s1[i]!=s1[k] || s1[j]!=s1[k]) { flag2=true; break; } } //cout<<"i,j,k"<<i<<" "<<j<<" "<<k<<endl; if(flag1==true && flag2==true) cout<<"false"<<endl; else if(flag1==false && flag2==true) { cout<<strncpy(s2,s1,strlen(s1)/2); } else if(flag1==true && flag2==false) { cout<<strncpy(s2,s1,strlen(s1)/3); } else { cout<<s1[0]; } return 0; }
3、
給出一個整數n,將n分解為至少兩個整數之和,使得這些整數的乘積最大化,輸出能夠獲得的最大的乘積。
例如:
2=1+1,輸出1;
10=3+3+4,輸出36。
輸入描述:
輸入為1個整數
輸出描述:
輸出為1個整數
輸入例子1:
10
輸出例子1:
36
#include<iostream> using namespace std; int main() { int n,i,j,maxs=0;; int res[100]={0}; cin>>n; res[1]=0; for(i=2;i<=n;i++) { for(j=1;j<=i/2;j++) { maxs=max(maxs,max(j,res[j])*max(i-j,res[i-j])); } res[i]=maxs; } cout<<res[n]; return 0; }
4、
從非負整數序列 0, 1, 2, ..., n中給出包含其中n個數的子序列,請找出未出現在該子序列中的那個數。
輸入描述:
輸入為n+1個非負整數,用空格分開。 其中:首個數字為非負整數序列的最大值n,後面n個數字為子序列中包含的數字。
輸出描述:
輸出為1個數字,即未出現在子序列中的那個數。
輸入例子1:
3 3 0 1
輸出例子1:
2
#include<iostream> using namespace std; int main() { int n,a[20],sum=0,sum1=0; cin>>n; for(int i=0;i<n;i++) { cin>>a[i]; sum=sum+a[i]; } for(int j=n;j>0;j--) { sum1=sum1+j; } cout<<sum1-sum; return 0; }
5、小招喵喜歡在數軸上跑來跑去,假設它現在站在點n處,它只會3種走法,分別是:
1.數軸上向前走一步,即n=n+1
2.數軸上向後走一步,即n=n-1
3.數軸上使勁跳躍到當前點的兩倍,即n=2*n
現在小招喵在原點,即n=0,它想去點x處,快幫小招喵算算最快的走法需要多少步?
輸入描述:
小招喵想去的位置x
輸出描述:
小招喵最少需要的步數
輸入例子1:
3
輸出例子1:
3
#include<iostream>
using namespace std;
int main()
{
int x;
int res[10000]={0};
cin>>x;
res[0]=0;
res[1]=1;
for(int i=2;i<=abs(x)+1;i++)
{
res[i]=min(res[i-1]+1,i%2==0?(res[i/2]+1):res[i-1]+1);
res[i-1]=min(res[i-1],res[i]+1);
}
cout<<res[abs(x)];
return 0;
}