• PAT 1031 Hello World for U


    1031 Hello World for U

    Given any string of N (≥5) characters, you are asked to form the characters into the shape of U. For example, helloworld can be printed as:

    1. h d
    2. e l
    3. l r
    4. lowo

    That is, the characters must be printed in the original order, starting top-down from the left vertical line with n1​ characters, then left to right along the bottom line with n2​ characters, and finally bottom-up along the vertical line with n3​ characters. And more, we would like U to be as squared as possible -- that is, it must be satisfied that n1​=n3​=max { k | k≤n2​ for all 3≤n2​≤N } with n1​+n2​+n3​−2=N.

    Input Specification:

    Each input file contains one test case. Each case contains one string with no less than 5 and no more than 80 characters in a line. The string contains no white space.

    Output Specification:

    For each test case, print the input string in the shape of U as specified in the description.

    Sample Input:

    helloworld!
    

    Sample Output:

    1. h !
    2. e d
    3. l l
    4. lowor

    总结:这道题写的不行,不知道哪里错了,两个测点没过

    知道了,原来是一开始在余数为2的情况下n1,n2,n3的值分错了,没正确理解题目意思,n1,n3是永远都要小于n2的,所以当余数为2时,多余的两个都分给n2

    1. #include
    2. using namespace std;
    3. int main(){
    4. string s,t;
    5. int n1,n2,n3,n;
    6. cin >> s;
    7. n=(s.size()+2)/3;
    8. if((s.size()+2)%3==0) n1=n2=n3=n;
    9. else if((s.size()+2)%3==1){
    10. n1=n3=n;
    11. n2=n+1;
    12. }
    13. else{
    14. n1=n3=n+1;
    15. n2=n;
    16. }
    17. for(int i=0;i-1;i++){
    18. t+=s[i];
    19. t+=s[s.size()-1-i];
    20. }
    21. t+=s.substr(n1-1,n2);
    22. int index=0;
    23. for(int i=0;i-1;i++){
    24. for(int j=0;j
    25. if(j==0 || j==n2-1) cout << t[index++];
    26. else cout << ' ';
    27. }
    28. cout << endl;
    29. }
    30. cout << s.substr(n1-1,n2) << endl;
    31. return 0;
    32. }

     依照惯例,还是看看大佬的代码:

    膜拜,真的是长见识了!

    1. #include
    2. #include
    3. using namespace std;
    4. int main() {
    5. char c[81], u[30][30];
    6. memset(u, ' ', sizeof(u));
    7. scanf("%s", c);
    8. int n = strlen(c) + 2;
    9. int n1 = n / 3, n2 = n / 3 + n % 3, index = 0;
    10. for(int i = 0; i < n1; i++) u[i][0] = c[index++];
    11. for(int i = 1; i <= n2 - 2; i++) u[n1-1][i] = c[index++];
    12. for(int i = n1 - 1; i >= 0; i--) u[i][n2-1] = c[index++];
    13. for(int i = 0; i < n1; i++) {
    14. for(int j = 0; j < n2; j++)
    15. printf("%c", u[i][j]);
    16. printf("\n");
    17. }
    18. return 0;
    19. }

    好好学习,天天向上!

    我要考研

    2022.11.3

    开始没有看清楚题目,题目中说的n1=最顶端到最底端的字符的数量

    1. #include
    2. using namespace std;
    3. int main(){
    4. string s;
    5. cin >> s;
    6. int n,n1,n2,n3;
    7. n=(s.size()+2)/3;
    8. n1=n3=n;//从最顶端到最低端字符的数量
    9. n2=s.size()-n1*2;//求出来的是中间空格的数量
    10. for(int i=0;i-1;i++){
    11. printf("%c",s[i]);
    12. for(int j=0;jprintf(" ");
    13. printf("%c\n",s[s.size()-1-i]);
    14. }
    15. for(int i=n1-1;i1;i++) printf("%c",s[i]);
    16. return 0;
    17. }

  • 相关阅读:
    FifoBuffer函数库详解
    python 之xml 使用原生xml.dom
    Comate SaaS版:开发者的梦想工具终于来了
    中断:PL硬中断,基地址,优先级。
    关于晋升与跳槽的一些思考
    uniapp绑定事件
    「底层原理」epoll源码分析,还搞不懂epoll的看过来
    七、垃圾收集中级
    查找链表第N个节点
    Ascend C保姆级教程:我的第一份Ascend C代码
  • 原文地址:https://blog.csdn.net/weixin_50679551/article/details/126906785