好未来笔试 AC代码
求第四和第六题AC代码
第一题 拆数字串
这道题应该动态规划的,我的的代码有问题
这道题当时侥幸AC,应该只是过了牛客的测试用例,对于712这种情况应该输出1,我的代码确输出0
#include <iostream>
#include <string>
#include <cstdio>
#include <vector>
using namespace std;
int main()
{
vector<int> arr;
string str;
int res=0, sum=0;
cin >> str;
for(int i=0; i<str.size(); i++){
if(str[i]<'0' || str[i]>'9')
return 0;
int temp = str[i]-'0';
arr.push_back(temp);
}
for(int i=0; i<arr.size(); i++){
sum += arr[i];
if(arr[i]%3 == 0){
res++;
sum = 0;
continue;
}
if(sum%3 == 0){
res++;
sum = 0;
}
}
cout << res << endl;
return 0;
}
第二题 加与或的关系
#include <iostream>
using namespace std;
void fun(long long x, long long k){
long long y = 0, n =1;
while(k > 0){
if(x%2 != 0){
while(x%2 != 0){
n = n*2;
x = x/2;
}
}
if(k%2 != 0)
y = y+n;
n = n*2;
x = x/2;
k = k/2;
}
cout << y;
}
int main() {
long long t, x, k;
cin >> t;
for(int i=0; i<t; i++){
cin>>x>>k;
fun(x, k);
if(i!=t-1)
cout<<endl;
}
return 0;
}
第三题 排列组合
#include<cstdio>
#include<string>
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
vector<string> arr;
int main()
{
int a[11];
for(int i=0; i<10; i++)
scanf("%d",&a[i]);
for(int i=0; i<(1<<10); i++)
{
int f=0;
for(int j=0; j<10; j++)
if(!((i&(1<<j)))&&a[j])
{
f=1;
break;
}
if(f)
continue;
string str="";
for(int j=0; j<10; j++)
if(i&(1<<j))
str.push_back('0' + j);
arr.push_back(str);
}
sort(arr.begin(),arr.end());
for(int i=0; i<arr.size(); i++)
cout<<arr[i]<<endl;
return 0;
}
第五题 最大上升子序列和
#include<stdio.h>
using namespace std;
int arr[100];
int maxSumIS( int arr[], int n )
{
int i, j, max = 0;
int dp[n];
for ( i = 0; i < n; i++ )
dp[i] = arr[i];
for ( i = 1; i < n; i++ )
for ( j = 0; j < i; j++ )
if ( arr[i] > arr[j] && dp[i] < dp[j] + arr[i])
dp[i] = dp[j] + arr[i];
for ( i = 0; i < n; i++ )
if ( max < dp[i] )
max = dp[i];
return max;
}
int main()
{
int temp=0, i=0;
while(~scanf("%d", &temp)){
arr[i] = temp;
i++;
}
printf("%d\n", maxSumIS(arr, 100));
return 0;
}#好未来##题解##笔试题目##秋招#
联想公司福利 1477人发布