L 1-002印刷砂時計(20点)本題では、所定の記号を砂時計の形に印刷するプログラムを書くように要求します.PAT————墨白


L 1-002プリント砂時計(20点)
この問題では、与えられた記号を砂時計の形に印刷するプログラムを書く必要があります.例えば、17個の「*」が与えられ、以下の形式で印刷する必要がある.
「砂時計形状」とは、行ごとに奇数個の記号が出力されることを意味する.各行のシンボルの中心を揃えます.隣接する2行の記号数の差2;シンボル数は、まず大きい順から小さい順に1に減少し、小さい順から大きい順に増加する.先頭記号の数が等しい.
任意のN個の記号を与えると,必ずしも砂時計を構成できるとは限らない.印刷された砂時計はできるだけ多くの記号を使うことができるように要求されています.入力形式:
入力は、1行に1つの正の整数N(≦1000)と1つの記号を与え、中間をスペースで区切る.出力フォーマット:
まず所与の記号からなる最大の砂時計形状を印刷し,最後に1行に残った不要な記号数を出力する.入力サンプル:入力出力は自分で原題を見に行きましょう.ここでは主に考え方OKを話します.私たちはこの問題について話します.この問題は少し面白いです.時間に要求があるので、mainにコードを書くことができますが、私たちは考えを話します.
頭が痛い問題は、スペースは前半しか出力できず、各行後半のスペースは出力できません.そうしないと、フォーマットが間違ってしまうことに注意してください.
この問題を手に入れて、私たちは過程に向かう方法を採用して、次第に問題を簡略化して、上から下へ、次第に精進します.考え方は以下の通りである:1.問題が複雑すぎて、三角形を印刷してくれる関数があればいいのですが、どのような関数が必要ですか?うんうん、二つだと思います.一つは上の三角を印刷してください.もう一つは下の三角を印刷してください.2.これはどんな関数ですか.ははは、私が彼に行数と記号を伝えたら、彼は私に三角を印刷してくれればよかったのに.便利さを考慮して、この関数はその尖った記号を印刷しないようにしました.この関数は実現しやすい.3.このような関数があれば、問題はずっと簡略化されていますが、上三角と下三角の先端を除いてどれだけの行があるかを知る必要があります.そうすれば、関数にパラメータを伝えることができます.では、問題は三角形ごとに最大何行印刷すべきかを求める問題に簡略化され、この問題も難しくなく、whileが実現しました.[原句]行数がわかったら、印刷して残すのは簡単ですか.5.へえ、この問題は時間に制限があるので、今書いた関数コードをmainに移すようです.関数コードは次のとおりです.
#include
using namespace std;
void myprintfdown(int n,char ch);//  n      
void myprintfup(int n,char ch);//printf n line tri that have no sharp
int main()
{
	int N,linecount,line,n;
	int linep,sum=0,hsum=0,every=3;
	char ch;
	cin>>N>>ch;
	n=(N-1)/2;
	linecount=3;line=0;
	while(1){
		if(n