您的位置:首页 > 其它

PAT 1008. 数组元素循环右移问题 (20)

2016-05-02 12:53 453 查看
投机取巧版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);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: