投机取巧版get……
然而我要换种方法解决这道题,不过下面这种算法弊端很明显就是如果输入的数非常非常非常大,move和give的数组长度需要定义的很大很大很大,有点事复杂度仅为n;一开始没看到题目条件写的这个算法,接下来要换种算法了……加油!(以下代码仅供观看……= =)
#include<stdio.h>
#include<string.h>int main()
{
int n,m,nod,i,s=0,t=0,q,M;
char move[10000]={0},give[10000]={0},str[20]={0};
scanf("%d",&n);
scanf("%d",&m);
q=m%n;
for(i=0;i<n;i++)
{
scanf("%d",&nod);
sprintf(str,"%ld",nod);
M=strlen(str);
if(i>=(n-m)&&(n-m)>=0)
{
sprintf(&move[s],"%*d",M,nod);
if(m==n&&i==(n-1))continue;
sprintf(&move[s+M]," ");
s=s+1+M;
}
else if(i<(n-m)&&(n-m)>=0)
{
sprintf(&give[t],"%*d",M,nod);
if(i==(n-m-1))continue;
sprintf(&give[t+M]," ");
t=t+1+M;
}
if((n-m)<0&&i>=(n-q))
{
sprintf(&move[s],"%*d",M,nod);
if(q==0&&i==(n-1))continue;
sprintf(&move[s+M]," ");
s=s+1+M;
}
else if((n-m)<0&&i<(n-q))
{
sprintf(&give[t],"%*d",M,nod);
if(i==(n-q-1))continue;
sprintf(&give[t+M]," ");
t=t+1+M;
}
}
printf("%s",move);
printf("%s",give);
}