好未来笔试 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; }#好未来##题解##笔试题目##秋招#