您的位置:首页 > 其它

【控制台】快开学了,闲的没事,画个圈圈诅咒你

2012-02-17 18:24 375 查看
额 马上开学了 看到这么一个题 画圈圈啊



好吧 闲的没事儿 解解

还解了一下方程

java般

/*=============================================================================
#     FileName: drawCircle.java
#         Desc:
#       Author: yangyang
#        Email: duoduo3_69@163.com
#     HomePage:
#      Version: 0.0.1
#   LastChange: 2012-02-17 16:23:32
#      History:
=============================================================================*/
import java.lang.Math;
public class drawCircle
{
public static void main(String[] arg)
{
draw(20);
}
static void draw(double r)
{
//圆用星星来画
//横坐标x,纵坐标y
//由圆的方程(x-r)^2+(y-r)^2 = r ^ 2 解出
//x = r - sqrt(2ry - y^2)
//local = x,即星星的横坐标
double local = 0;
//方程里面开方的部分
double sqnumber = 0;
//用2 * row行来画这个圆
int row = 10;
//y = r/row * i;
double y = r / row;
//需要输出空格的个数
long many = 0;
for( int i = 0; i < row ; i++ )
{
sqnumber = y * i * ( 2 * r - y * i);
local = r - Math.sqrt(sqnumber); // local = r(1-sqrt(i/5(2 - i/5)))
//空格数为整数,用round转换一下
many =  Math.round(local);
printBlank(many);
System.out.print("*");
printBlank( Math.round(2 * (r - many)));
System.out.print("*\n");
}

for( int i = row - 1; i >= 0 ; i-- )
{
sqnumber = y * i * ( 2 * r - y * i);
local = r - Math.sqrt(sqnumber); // local = r(1-sqrt(i/5(2 - i/5)))
many =  Math.round(local);
printBlank(many);
System.out.print("*");
printBlank( Math.round(2 * (r - many)));
System.out.print("*\n");
}
}
static void printBlank(long many)
{
for(int i = 0; i < many; i++)
{
System.out.print(" ");
}
}
}




c++

/*=============================================================================
#     FileName: drawCircle.cpp
#         Desc:
#       Author: yangyang
#        Email: duoduo3_69@163.com
#     HomePage:
#      Version: 0.0.1
#   LastChange: 2012-02-17 18:13:37
#      History:
=============================================================================*/
#include<iostream>
#include<cmath>
using namespace std;
class Circle
{
public:
Circle();
Circle(double radius);
void draw();
protected:
//输出空格
void printBlank(int many);
private:
// 半径
double r;
};

Circle::Circle()
{
}
Circle::Circle(double radius):r(radius)
{
}
void Circle::draw()
{
double local = 0;
double sqnumber = 0;
int row = 10;
double y = r / row;
int many = 0;
for( int i = 0; i < row ; i++ )
{
sqnumber = y * i * (2 * r - y * i);
local = r - sqrt(sqnumber);
many = floor(local);
printBlank(many);
cout << "*";
printBlank(floor( 2 * ( r - many)));
cout << "*" << endl;
}
for( int i = row -1; i >= 0 ; i-- )
{
sqnumber = y * i * (2 * r - y * i);
local = r - sqrt(sqnumber);
many = floor(local);
printBlank(many);
cout << "*";
printBlank(floor( 2 * ( r - many)));
cout << "*" << endl;
}
}

void Circle::printBlank(int many)
{
for( int i = 0; i < many ; i++ )
{
cout << " ";
}
}

int main()
{
Circle a(20);
a.draw();
return 0;
}




python

'''
#=============================================================================
#     FileName: drawCircle.py
#         Desc:
#       Author: yangyang
#        Email: duoduo3_69@163.com
#     HomePage:
#      Version: 0.0.1
#   LastChange: 2012-02-17 18:13:55
#      History:
#=============================================================================
'''
import math
class Circle:
def __init__(self,radius = 0):
self.__r = radius
def printBlank(self,many):
for i in range(many):
print " ",
def draw(self):
row = 10
y = self.__r /row
array_i = range(row)
for i in array_i:
sqnumber = y * i * ( 2 * self.__r - y * i)
local = self.__r - math.sqrt(sqnumber)
many = int(math.floor(local))
self.printBlank(many)
print "*",
self.printBlank(int(math.floor( 2 * (self.__r - many))))
print "*"
for i in array_i[::-1]:
sqnumber = y * i * ( 2 * self.__r - y * i)
local = self.__r - math.sqrt(sqnumber)
many = int(math.floor(local))
self.printBlank(many)
print "*",
self.printBlank(int(math.floor( 2 * (self.__r - many))))
print "*"

if __name__ == "__main__":
a = Circle(15)
a.draw()




爱的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: