ورود

View Full Version : مشکل در نوشتن برنامه هرم اعداد



mohsen041
سه شنبه 28 بهمن 1393, 01:16 صبح
با سلام من دارم رو یه برنامه فکر مبکنم هر کهری میکنم درک ریاضیاتی ازش ندارم و نمیدونم الگوریتمش چطوریه برنامه باید یک عدد بگیره و مثلا اگه 5 گرفت:
1
121
12321
1234321
123454321
1234321
12321
121
1
چاپ کنه البته به صورت هرم و یک لوذی نه به این صورت مثلث یعنی باید اسپیس بخوره و لوذی بشه فقط میدونم که 4 تا معادله خط تو برنامه استفاده میشه ولی متاسفانه درک کامل ریاضیاتی ازش ندارم کسی میتونه الگوریتم یا فلوچارتشو بهم بده که درکش کنم ؟؟ یا کدشو بنویسه؟؟

ahmad.mo74
سه شنبه 28 بهمن 1393, 11:43 صبح
سلام، من این کد رو خیلی وقت پیش نوشته بودم. اما الان متد printRow اش رو برای شما تغییر دادم :


public interface Shape {


public void draw();


}



public class Diamond implements Shape {


private static final String SPACE = " ";
private static final String HALF_SPACE = "\u2008";


private int smallDiameter;


public Diamond() {
}


public Diamond(int smallDiameter) {
this.smallDiameter = smallDiameter;
}


public int getSmallDiameter() {
return smallDiameter;
}


public void setSmallDiameter(int smallDiameter) {
this.smallDiameter = smallDiameter;
}


@Override
public void draw() {
int spaceCounter = (smallDiameter >> 1) - (~smallDiameter & 1);
boolean halfSpace = (smallDiameter & 1) == 0;
for (int i = 1; i <= smallDiameter; i++) {
fillSpace(halfSpace ? spaceCounter : spaceCounter--, halfSpace);
halfSpace = !halfSpace;
printRow(i);
}
spaceCounter++;
for (int i = smallDiameter - 1; i > 0; i--) {
fillSpace(halfSpace ? spaceCounter : ++spaceCounter, halfSpace);
halfSpace = !halfSpace;
printRow(i);
}
}


private void fillSpace(int count, boolean halfSpace) {
if (halfSpace) {
System.out.print(HALF_SPACE);
}
for (int i = 0; i < count; i++) {
System.out.print(SPACE);
}
}


private void printRow(int columnCount) {
int mid = columnCount / 2;
for (int i = 1; i <= mid; i++) {
System.out.print(i);
}
if ((columnCount & 1) == 1) {
System.out.print(columnCount / 2 + 1);
}
for (int i = mid; i > 0; i--) {
System.out.print(i);
}
System.out.println();
}


public static void main(String[] args) {
Diamond diamond = new Diamond();
for (int i = 1; i <= 15; i++) {
diamond.setSmallDiameter(i);
diamond.draw();
System.out.println("-----------");
}
}


}