古风排版——错误计算列数导致一个没通过

/*最关键的这一句:
lie=cd/wid;
if(cd%wid==0) lie++;
之前是写着lie=(int)(cd*1.0/wid+0.5);*///错误的四舍五入
比如只有一个字符,假设wid为4,1/4+0.5=0.75,一int就变成0了
#include<cstdio>
#include<iostream>
#include<math.h>
#include<string.h>
#include<stdlib.h>
#include<algorithm>
using namespace std;
char st[1005][1005];
int main()
{
  int i,j;
  for(i=0;i<1005;i++)
  memset(st[i],'\0',sizeof(st[0]));
  int wid=0;
  char s[1005];
  memset(s,'\0',sizeof(s));
  cin>>wid;
  getchar();
  gets(s);
  int cd=strlen(s);
  int lie;
  lie=cd/wid;
  if(cd%wid!=0) lie++;
  for(i=0;i<cd;i++)
  {
    st[i%wid][lie-(i/wid)-1]=s[i];
  }
  for(i=0;i<wid;i++)
  {
    for(j=0;j<lie;j++)
    {
      if(st[i][j]=='\0') cout<<' ';
      else putchar(st[i][j]);
    }
    printf("\n");
  }
  return 0;
}



猜你喜欢

转载自blog.csdn.net/qq_40822492/article/details/79648297