1. 输出正方形图案
Time Limit: 1 Sec Memory Limit: 2 MB
Submit: 927 Solved: 666
[Submit][Status][Web Board]
Description
输出用“*”组成的正方形图案,例如
输入5,输出
*****
*****
*****
*****
*****
输入3,输出
***
***
***
输入1,输出
*
Input
输入一个整数n,n在1~5之间。
Output
输出边长为n个“*”组成的正方形图案。
Sample Input
5
Sample Output
*****
*****
*****
*****
*****
#include <stdio.h>
int main()
{
int n,i,j;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
printf("*");
printf("\n");
}
}
2.关于三角形
(1)一半的
1. 对于本题的一般做法是先找出 总行数 行数 空格 + 这四者之间的关系。
2.发现总框架是一行一行的来,所以说行数是最外层循环控制换行,并且这里的行数一般是从1开始的。
3.一般当空格或者+变化趋势与行数的变化趋势不同的时候,比如这里是空格,这样控制空格的变量一般必须要有总行数与单个行的联系来不断凑出这个数字,有时候这个数字还要扩大来不断的凑。
方法一:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
int i,j;
int n;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
for(j=0;j<n-i;j++)\\这里是总行数与单个行数来凑数字
{
printf(" ");
}
for(j=0;j<2*i-1;j++)
{
printf("+");
}
printf("\n");
}
return 0;
}
方法二:(坐标法)
注意坐标法排列的顺序是从上到下从左向右
#include <stdio.h>
#include <stdlib.h>//这个为abs的头文件
int main()
{
int n;
int x,y;
scanf("%d",&n);
for(y=n-1;y>=0;y--)\\这里要注意x与y到底谁为大循环**这里y必须从正数开始,不可从负数开始到0,如果从负数开始的话,图形将倒过来**
{
for(x=-(n-1);x<=(n-1);x++)
{
if(abs(y)+abs(x)>=n&&x>0)\\这里要注意结束条件,因为没有空格所以要break;
break;
else
{
if(abs(y)+abs(x)<=(n-1))
printf("+");
else
printf(" ");
}
}
printf("\n");
}
return 0;
}
(2)对称的
Input
输入为多个整数n,0<n<100。当n为0时结束输入。
Output
若n为偶数,则输出一个正向的n层等腰三角形;n为奇数,则输出一个倒向的n层等腰三角形。三角形由“+”组成。任意两个图形之间有一个空行分隔,格式见sample。
Sample Input
5 4 0
Sample Output
+++++++++
+++++++
+++++
+++
+
+
+++
+++++
+++++++
方法一:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i,j,n;
while(scanf("%d",&n)&&n!=0)
{
if(n%2!=0)
{
for(i=1; i<=n; i++)
{
for(j=0; j<i-1; j++)
printf(" ");
for(j=0; j<2*n-(2*i-1); j++)
{
if(j==2*n-(2*i-1)-1)
printf("+\n");
else
printf("+");
}
}
printf("\n");
}
else
{
for(i=1;i<=n;i++)
{
for(j=0;j<n-i;j++)
printf(" ");
for(j=1;j<=2*i-1;j++)
{
if(j==2*i-1)
printf("+\n");
else
printf("+");
}
}
printf("\n");
}
}
return 0;
}
//我爱坐标法
各种菱形(oj关了,题目有空再补)
1.*型的
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
int main()
{
int n,x,y;
scanf("%d",&n);
for(x=-n;x<=n;x++)
{
for(y=-n;y<=n;y++)
{
if(x+y>n)
break;//后面没有空格,就直接break
else if(abs(x)+abs(y)<=n)
printf("*");
else
printf(" ");
}
printf("\n");
}
}
2.数字型的
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
int main()
{
int n,x,y;
scanf("%d",&n);
for(x=-(n-1);x<=(n-1);x++)
{
for(y=-(n-1);y<=(n-1);y++)
{
if(x+y>(n-1))
break;
else if(abs(x)+abs(y)<=(n-1))
printf("%d",n-abs(x)-abs(y));
else
printf(" ");
}
printf("\n");
}
}
加强版
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
int main()
{
int x,y,n;
scanf("%d",&n);
for(x=-(n-1);x<=(n-1);x++)
{
for(y=-(n-1);y<=(n-1);y++)
{
if(x==0||y==0)
printf("1");
else if(abs(x)+abs(y)<=(n-1))
printf("%d",abs(x)+abs(y));
else
printf(" ");
}
printf("\n");
}
}
空心菱形
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
int main()
{
int n,x,y;
scanf("%d",&n);
for(x=-n;x<=n;x++)
{
for(y=-n;y<=n;y++)
{
if(x+y>n)
break;
else if(abs(x)+abs(y)==n)//只有边边有*
printf("*");
else
printf(" ");
}
printf("\n");
}
}