组队
490
每次选这一列最高的,如果最高的球员已经选择了就选择第二高的以此类推,计算五列
17 20 15 11 18
98 99 98 97 98
得到答案490
年号字串
#include<iostream>
#include<string>
#include<stack>
using namespace std;
stack<int> ans;
int main(){
int num=2019;
int shang=0;
int yushu=0;
while(num!=0){
yushu=num%26;
shang=num/26;
ans.push(yushu);
num=shang;
}
while(!ans.empty()){
int mount=ans.top();
char chr=mount-1+'A';
cout<<chr;
ans.pop();
}
return 0;
}
数列求和
4659
#include<iostream>
#include<string>
#include<stack>
#include<cmath>
using namespace std;
int main(){
long long a,b,c,d;
a=1,b=1,c=1;
for(long long i=4;i<=20190324;i++){
d=(a+b+c)%10000;
a=b,b=c,c=d;
}
cout<<d<<endl;
return 0;
}
数的分解
40785
#include<iostream>
#include<string>
#include<stack>
#include<cmath>
using namespace std;
bool check(int num){
bool flag=false;
while(num!=0){
if(num%10==2||num%10==4){
flag=true;
break;
}
num/=10;
}
return flag;
}
int main(){
int ans=0;
for(int i=1;i<2019;i++){
if(check(i)) continue;
for(int j=i+1;j<2019;j++){
if(check(j))continue;
if(i+j>=2019) break;
for(int m=j+1;m<2018;m++){
if(check(m)) continue;
if(i+j+m==2019)
ans++;
}
}
}
cout<<ans<<endl;
return 0;
}
#include<iostream>
#include<string>
using namespace std;
int main(){
int n;
cin>>n;
long long ans=0;
for(int i=1;i<=n;i++){
string str=to_string(i);
if(str.find("2")!= string::npos||str.find("0")!= string::npos||str.find("1")!= string::npos||str.find("9")!= string::npos){
ans+=i;
}
}
cout<<ans<<endl;
return 0;
}
迷宫
#include<iostream>
using namespace std;
#include<string>
#include<queue>
char line[31][51];
int visited[31][51]={0};
int dir[4][2]={{1,0},{0,-1},{0,1},{-1,0}};//D<L<R<U
char ch[4]={'D','L','R','U'};
struct node{
int x,y;
string road;
int length=0;
node(int a,int b){
x=a,y=b;
}
};
queue<node> ans;
void bfs(){
queue<node> points;
node now(1,1);
now.road="";
points.push(now);
visited[1][1]=1;
while(!points.empty()){
node head=points.front();
points.pop();
if(head.x==30&&head.y==50){
ans.push(head);
}
//四个方向
for(int i=0;i<4;i++){
int dx=head.x+dir[i][0];
int dy=head.y+dir[i][1];
if(dx>=0&&dx<=30&&dy>=0&&dy<=50)
{
if(line[dx][dy]=='0'&&!visited[dx][dy])
{
node next(dx,dy);
next.road=head.road+ch[i];//记录路径
next.length=head.length+1;
points.push(next);
visited[dx][dy]=1;
}
}
}
}
}
int main(){
for(int i=1;i<=30;i++){
for(int j=1;j<=50;j++)
cin>>line[i][j];
getchar();
}
bfs();
node result=ans.front();
ans.pop();
while(!ans.empty()){
node temp=ans.front();
ans.pop();
if(temp.length<result.length)
result=temp;
}
cout<<result.road;
return 0;
}
完全二叉树的值
#include<iostream>
using namespace std;
#include<queue>
#include<cmath>
int getdepth(int nodenum ){
return floor(log2(nodenum))+1;
}
int main(){
int node;
cin>>node;
queue<long>worth;
for(int i=0;i<node;i++){
int temp;
cin>>temp;
worth.push(temp);
}
int max=0,cen=0;
for(int i=1;i<=getdepth(node);i++){
long temp=0;
for(int j=1;j<=pow(2,i-1);j++){
temp+=worth.front();
worth.pop();
}
if(temp>max){
max=temp;
cen=i;
}
}
cout<<cen<<endl;
return 0;
}
等差数列
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
int n;
cin>>n;
int nums[n];
for(int i=0;i<n;i++){
cin>>nums[i];
}
sort(nums,nums+n);
int minmum=1000000;
for(int i=1;i<n;i++){
if(nums[i]-nums[i-1]<minmum)
minmum=nums[i]-nums[i-1];
}
int ans=0;
if(nums[0]==nums[n-1])
ans=n;
else ans=(nums[n-1]-nums[0])/minmum+1;
cout<<ans;
return 0;
}
后缀表达式 答案没有通过
#include<iostream>
#include<algorithm>
using namespace std;
bool cmp(long long a,long long b){
return abs(a)>abs(b);
}
int main(){
long long plus,sub;
cin>>plus>>sub;
plus++;
long long total=plus+sub;
long long nums[total];
for(int i=0;i<total;i++)
cin>>nums[i];
long long ans=0;
sort(nums,nums+total,cmp);
int flag=false;//尚未使用过负号
long long j=0;
for(long long i=0;i<plus;j++){
if(nums[j]<0){
if(flag){
ans-=nums[j];
i++;
}else if(sub>=1){
flag=true;
ans-=nums[j];
}else {
ans+=nums[j];
i++;
}
}
else {
ans+=nums[j];
i++;
}
}
// cout<<" "<<ans<<" ";
for(long long m=j;m<total;m++){
ans-=nums[m];
}
cout<<ans;
return 0;
}