zoukankan      html  css  js  c++  java
  • PAT 1027 打印沙漏(20)(思路)

    1027 打印沙漏(20)(20 分)

    本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印

    *****
     ***
      *
     ***
    *****
    

    所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。

    给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。

    输入格式:

    输入在一行给出1个正整数N(<=1000)和一个符号,中间以空格分隔。

    输出格式:

    首先打印出由给定符号组成的最大的沙漏形状,最后在一行中输出剩下没用掉的符号数。

    输入样例:

    19 *
    

    输出样例:

    *****
     ***
      *
     ***
    *****
    2

    思路:只要确定出第一行有多少个字符,就能打印沙漏(先递减每次减2,到1时开始递增) 

    #include <iostream>
    using namespace std;
    int pd(int x, int &y) {
    	if (x == 1)
    		return 1;
    	int sum = 1;
    	int k = 1;
    	while (sum < x) {
    		y = x - sum;   //y为剩余字符
    		k += 2;
    		sum += k * 2;
    	}
    	return	k - 2;   //k为第一行字符个数
    }
    int main() {
    	int n, m = 0;
    	int flag = 0;  //flag控制打点递增还是递减
    	int l, k, j;
    	char ch;
    	cin >> n >> ch;
    	j = k = l = pd(n, m);
    	while (k--) {
    		for (int i = 1; i <= (j - l) / 2; i++)
    			cout << " ";
    		for (int i = 1; i <= l; i++)
    			cout << ch;
    		cout << endl;
    		if (!flag)
    			l -= 2;
    		else
    			l += 2;
    		if (l == 1)
    			flag = 1;
    
    	}
    	cout << m;
    	return 0;
    }
    
  • 相关阅读:
    2-6 求阶乘序列前N项和
    2-5 求平方根序列前N项和
    2-4 求交错序列前N项和
    2-3 求平方与倒数序列的部分和
    2-2 阶梯电价
    2-1 求整数均值
    2-17 生成3的乘方表
    【秋招之行】自白篇
    Django开发个人博客入门学习经验贴
    浅尝装饰器和AOP
  • 原文地址:https://www.cnblogs.com/F-itachi/p/9974385.html
Copyright © 2011-2022 走看看