重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
按照给定小菱形的数量n,利用字符打印菱形,要求
成都创新互联公司主要从事成都网站设计、成都做网站、外贸网站建设、网页设计、企业做网站、公司建网站等业务。立足成都服务泰安,10余年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:028-86922220/
,\
,空格,回车四种字符。具体格式见样例。
比如边长为3的菱形,最少有5个小菱形(左边的情况),最多有9个小菱形(右边的情况)。
/\ /\ /\/\ /\/\ /\/\/ /\/\/\ \/\/ \/\/\/ \/\/ \/
对应的编号分别为
1 1 2 3 2 3 4 5 4 5 6 7 8 9输入格式
存在多个样例,每个样例是一个整数n(1≤n≤100)。如果n为0,表示输入结束,这个样例不需要处理。
输出格式依次按要求输出对应数量的菱形。
样例输入1 2 3 4 5 6 7 0样例输出
/\ \/ /\ /\/ \/ /\ /\/\ \/\/ /\ /\/\ \/\/ \/ /\ /\/\ /\/\/ \/\/ /\ /\/\ /\/\/\ \/\/\/ /\ /\/\ /\/\/\ \/\/\/ \/代码:
#include#includeint main(){
int n = 1;
while(n!=0){
scanf("%d",&n);
if(n==0) break;
int a = ceil(sqrt((float)n));
int head = a;
int last = a;
int count = 0;
int up = (a*a-a)/2+a;
for(int x = 0;x< a;x++){
for(int y = 1;y< last||y == last;y++){
if(y< head) printf(" ");
else{
if((y-head)%2==0){
printf("/");
printf("\\");
count=count+1;
if(count == n) break;
y++;
}
}
}
head = head-1;
last = last+1;
if(x != a-1) printf("\n");
if(x == a-1){
if(countup){
printf("\n");
count = up;
for(int x = 0;x< a-1;x++){
head = head+1;
last = last-1;
for(int y = 0;y
运行结果:思路:于是再次进行题目分析:首先菱形可以分为上半部分up和下半部分down,经过计算,我们可以得到
up=(a^2-a)/2+a
down=(a^2-a)/2
画菱形无非三种情况:
所以上层一定会画到最后一层,我们只需要把上层的最后一层根据最后一层所画的结点数去补一个/
——>如果是情况1则在最后补一个/,然后换行
——>如果是情况2则不需要补,直接换行
记录下最后一层所画的节点数count=count-(a^2-a)/2+a
换行之后,因为最后一层只缺\/了,画count个\/即可
至此为止,上半部分就画好了
下半部分我们经过分析,发现直接在节点处画\/即可
注意每好一个节点需判断画好的节点数是否等于n,等于则结束循环直接输出,不等于则下一步;
画节点的算法:1、将菱形分为上界和下界,上界a层,下界a-1层
2、两层for循环:
第一层for循环遍历层数
第二层for遍历打印每一层的数据
对每一层又根据第一个节点head和最后一个节点last划分区域
当当前位置在head之前,打印空格,当当前位置与head的差值为2的倍数时,打印/\,计数点跳过\往前走一步;
内层循环结束后换行;
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧