这两天没怎么敲代码,昨天晚上做做找找感觉
A 1,2,3排序 输出
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string.h>
#include <cstring>
#include <math.h>
using namespace std;
int main()
{
char aa[105];
int num[55];
scanf("%s",aa);
int tt=strlen(aa);
for(int i=0;i<=tt;i+=2)
num[i/2]=aa[i]-'0';
sort(num,num+(tt/2)+1);
if(tt==0)
printf("%d\n",num[0]);
else
{
for(int i=0;i<tt/2;i++)
{
printf("%d+",num[i]);
}
printf("%d\n",num[tt/2]);
}
}
B 比较每一次的数字和前一次 小就转一圈,大就直接减
#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <string.h>
#include <cstring>
#include <math.h>
using namespace std;
int main()
{
__int64 bef;
__int64 x;
__int64 sum=0;
__int64 que,tot;
scanf("%I64d%I64d",&que,&tot);
scanf("%I64d",&bef);
sum+=bef-1;
for(int i=1;i<tot;i++)
{
scanf("%I64d",&x);
if(x>=bef)
sum+=(x-bef);
else sum+=(que-bef+x);
bef=x;
}
printf("%I64d\n",sum);
}
C 水题,直接dfs
#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <string.h>
#include <cstring>
#include <math.h>
using namespace std;
int tot;
char aa[15];
int ww[15]={0},before=0;
int bb[2]={0};
int recent[1005];
int ii=0;
int judge=0;
int dfs()
{
if(ii==tot)
{
printf("YES\n");
judge=1;
for(int i=0;i<tot;i++)
printf("%d\n",recent[i]);
}
for(int i=1;i<=10;i++)
{
if(judge==1)
return 0;
if(ww[i]==1&&bb[ii%2]+i>bb[(ii+1)%2]&&i!=before)
{
bb[ii%2]+=i;
recent[ii]=i;
before=i;
ii++;
dfs();
ii--;
bb[ii%2]-=i;
}
}
}
int main()
{
scanf("%s",aa);
for(int i=0;i<10;i++)
if(aa[i]=='1')
ww[i+1]=1;
scanf("%d",&tot);
dfs();
if(judge==0)
printf("NO\n");
}
D题位运算还不太熟悉,正在熟悉中...