奇怪的逻辑

huolong1312 2004-05-01 10:19:51
我已经把C的语法和算法学的不错了,可是一到我自己编的时候,就什么语法算法
都不忘了,特别是已经想好怎么编的题一到上机就无重下手
还有一个简单问题,杨辉三角用C编程的规律在哪,我一直编可是总是无法突破它
的规律
...全文
35 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
烂笔头Danky 2004-05-01
  • 打赏
  • 举报
回复
给你一个代码吧,虽然是用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);
}
newegg2002 2004-05-01
  • 打赏
  • 举报
回复
一上机就无重下手..那就是实战太少了...多自个儿写写..
allsword 2004-05-01
  • 打赏
  • 举报
回复
要想找到感觉,
1,要是在心中的不是很清晰的,
画个流程吧,
其实就是有很清晰的路子画一个也不是个坏事。
2,要大量做有趣的练习,多想,多练,
很快就会有感觉。
bm1408 2004-05-01
  • 打赏
  • 举报
回复
呵呵!
规律就在上面了!
bm1408 2004-05-01
  • 打赏
  • 举报
回复
杨辉三角是(a+b)^n次方的展开式后各项的系数!


(a+b)^0 1
(a+b)^1 1 1

.......
规律就是:
各行第一个数是1
各行的最后一个数是1
从第3行起,除上面指出的第一个数和最后一个数外,其余各数是上一行同列和前一列的两个数之和!
zhouqingyuan 2004-05-01
  • 打赏
  • 举报
回复
没有什么规律,简单点就是直接用数组先把能确定的填上,然后其他的从上到下的做加法
填上就可以了。
多看看别人是怎么做的,慢慢就知道了。

70,020

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧