奇怪的逻辑
我已经把C的语法和算法学的不错了,可是一到我自己编的时候,就什么语法算法
都不忘了,特别是已经想好怎么编的题一到上机就无重下手
还有一个简单问题,杨辉三角用C编程的规律在哪,我一直编可是总是无法突破它
的规律
问题点数:0、回复次数:6Top
1 楼zhouqingyuan(浪帆)回复于 2004-05-01 22:40:23 得分 0
没有什么规律,简单点就是直接用数组先把能确定的填上,然后其他的从上到下的做加法
填上就可以了。
多看看别人是怎么做的,慢慢就知道了。Top
2 楼bm1408(向va_list学习~不用VC好多年~)回复于 2004-05-01 22:49:31 得分 0
杨辉三角是(a+b)^n次方的展开式后各项的系数!
(a+b)^0 1
(a+b)^1 1 1
.......
规律就是:
各行第一个数是1
各行的最后一个数是1
从第3行起,除上面指出的第一个数和最后一个数外,其余各数是上一行同列和前一列的两个数之和!Top
3 楼bm1408(向va_list学习~不用VC好多年~)回复于 2004-05-01 22:50:11 得分 0
呵呵!
规律就在上面了!Top
4 楼allsword(长剑)回复于 2004-05-01 22:52:43 得分 0
要想找到感觉,
1,要是在心中的不是很清晰的,
画个流程吧,
其实就是有很清晰的路子画一个也不是个坏事。
2,要大量做有趣的练习,多想,多练,
很快就会有感觉。
Top
5 楼newegg2002(同志们,同胞们,大学的四年,是扎实基础的四年!!)回复于 2004-05-01 22:56:32 得分 0
一上机就无重下手..那就是实战太少了...多自个儿写写..Top
6 楼danky()回复于 2004-05-01 23:42:30 得分 0
给你一个代码吧,虽然是用C++写的,但相信你能看得懂的,有些代码和函数不是一定需要的,只是为了显示的美观而增加的,自己看看吧,一点都不难的:
#include <iostream.h>
//计算一个数所占用的宽度
int dataLen(int data)
{
int len = 0;
while (data > 0)
{
data /= 10;
len++;
}
return len;
}
//控制每个输出的数的宽度
void cortrolLen(int data, int max)
{
int len = 0;
len = dataLen(max) - dataLen(data);
while (len != 0)
{
cout <<" ";
len--;
}
}
//根据参数(行数)输出杨辉三角的数据
void yangHuiSanJiao(int linage)
{
int i, j, k; //循环计数器
int digit = 1, max = 1; //保存最大的数,用于控制输出的格式
//生成动态二维数组
typedef int* dynamicArray;
int ** p_YanHuiSanJiao = new dynamicArray[linage];
for (i=0; i<linage; i++)
{
p_YanHuiSanJiao[i] = new int[i+1];
}
//写入杨辉三角的数据
for (i=0; i<linage; i++)
for (j=0; j<=i; j++)
if (j==0 || j==i)
p_YanHuiSanJiao[i][j] = 1;
else p_YanHuiSanJiao[i][j] = p_YanHuiSanJiao[i-1][j-1] + p_YanHuiSanJiao[i-1][j];
//找出最大的数
for (i=linage-1,j=0; j<linage; j++)
if (p_YanHuiSanJiao[i][j] > max)
max = p_YanHuiSanJiao[i][j];
digit = dataLen(max);
//输出杨辉三角
for (i=0; i<linage; i++)
{
//控制数据前面的空格输出
for (j=0; j<(linage-i)*digit-(digit-1); j++)
cout <<" ";
for (j=0; j<=i; j++)
{
if (j != 0)
cortrolLen(p_YanHuiSanJiao[i][j], max);
cout <<p_YanHuiSanJiao[i][j];
//控制数据间的空格输出
for (k=0; k<digit; k++)
cout <<" ";
}
cout <<endl;
}
}
void main()
{
int n;
do
{
cout <<"请输入一个整数,以确定要输出杨辉三角的行数,输入0为退出:";
cin >>n;
if (n > 0)
yangHuiSanJiao(n);
}
while (n !=0);
}
Top




