论坛: 编程破解 标题: 看哈这个题,呵呵,能帮就谢谢了!!!! 复制本贴地址    
作者: QQ [hx007]    论坛用户   登录
用C编译下面这个程序
                      1
                      121
                    12321
                    1234321
                  123454321
                  12345654321
                1234567654321
                123456787654321
              12345678987654321
如果能用到1*1=1,11*11=121,111*111=12321......,更好,3Q(他们是成:“金字塔”形状的)



[此贴被 QQ(hx007) 在 11月15日13时52分 编辑过]


[此贴被 QQ(hx007) 在 11月15日13时54分 编辑过]


[此贴被 QQ(hx007) 在 11月15日16时16分 编辑过]

地主 发表时间: 07-11-15 13:52

回复: listenwind [listenwind]   论坛用户   登录
你的问题很具有代表性,这是个关于流程控制的程序
先不看列  只看行理解
比如  123456787654321
中间的8 是最大数(也是你输入的数字)
输出1-N很简单用一个循环就可以
代码:

void hanshu1(int n)  //先记住这函数的名字 hanshu1()
{
  for(int i=1;i<=n;i++)
  cout<<i<<endl;
}//←这可是最基础的



B1层 发表时间: 07-12-27 14:40

回复: listenwind [listenwind]   论坛用户   登录
然后接上面,既然我们已经可以在行递增输出1-N的数字,下面考虑后面的递减输出了。

代码:
void hanshu2(int n)   //记住这函数的名字 hanshu2() {   for(int j=n;j>=1;j--)   cout<<j<<endl; }



输出结果为n n-1 n-2...321  (如果N大于3的话)

B2层 发表时间: 07-12-27 14:45

回复: listenwind [listenwind]   论坛用户   登录
下面让我们结合上面两个循环写一个输出比如像123456787654321的函数:


代码:

void hanshu3(int n)  //记住这函数的名字 hanshu3()
{  for(int k=1;k<=n;k++)  //→对照hanshu1()理解,是不是很简单? 我们称它为循环1
      cout<<" "<<k;
    //" "中的是个空格,是为了输出结果看起来更为美观!就是在每次循环输出结果前加个空格
    for(int j=n;j>=1;j--)  //→对照hanshu2()去理解。这个循环先称为循环2
      cout<<" "<<j;
      cout<<"\n"<<endl: 
    //这里的"\n"是换行的提示,为下一个程序理解做铺垫,本程序中没有实质意义 endl代表输出结束

}



如果你输入的是4
输出结果为:1234321

理解  以上循环1循环2之间的关系为顺序关系,就是循环1结束后接着开始循环2,就是说循环1里所有的数字输出完后,后面接着输出循环2要输出的数字

很简单吧?

流程控制就是  顺序 选择 循环 3个

下面的就是循环镶套了

B3层 发表时间: 07-12-27 15:02

回复: listenwind [listenwind]   论坛用户   登录
上面已经把最基础的准备知识说完了,现在该解决实质内容了

单从行说  两个循环(循环1和循环2)从行上已经可以输出了  1234...n....4321  了

下面我们运用循环镶套来用列控制输出

代码:

循环3
  {
  循环1
  语句1;
  循环2
  语句2;
  }


循环3控制循环1和循环2,循环1和循环2之间关系是,执行循环1,然后执行循环2

代码:

void hanshu(int n)
{
    int k,i,j;

    for(i=1;i<=n;++i)  //这里就是控制列输出的地方  仔细看好这个 i 变量  它起控制作用

              //注意下面两个循环!!!
for( j=1;j<=i-1;++j)
  cout<<" "<<j;
for( k=i;k>=1;--k)
              cout<<" "<<k;
              //上面两个循环你对照 循环1和循环2理解下
cout<<endl;  //endl代表输出结束,上下两个cout输出之间是在一行中相连的
}

}



因为每行输出的数字是变化的  也就是说行数和列数之间是一起变化的 之间的关系是:行数=列数 ,第一行显示数字的个数 也等于第一列数量被N减去的值



B4层 发表时间: 07-12-27 15:19

回复: listenwind [listenwind]   论坛用户   登录
上面看起来有点乱  这里我把刚刚编译通过的C++代码拿出来:
至于为什么是C++而不是C代码,是希望你能看懂理解后完成作业,起码地尊重我的劳动

代码:

#include  <iostream.h>
 
void hanshu(int n)
{
    int k,i,j;

    for(i=1;i<=n;++i)


for( j=1;j<=i-1;++j)
  cout<<" "<<j;
for( k=i;k>=1;--k)
          cout<<" "<<k;
 
cout<<endl;
}

}
void main()
  {
int a;
cout<<"please input a number!\n";
    cin >>a ;
hanshu(a);
  }





有时候最简单的  就是最强大的!

B5层 发表时间: 07-12-27 15:22

回复: listenwind [listenwind]   论坛用户   登录
补充: cout 相当于 c中的  prinrtf      cin 相当于 scanf

B6层 发表时间: 07-12-27 15:24

回复: ziaichen [ziaichen]   论坛用户   登录
感觉有两个问题,和大家分享下"
一、楼上所说的程序
  当n=10的时候,所出现的数据为:
      12345678910987654321
  当n=11的时候,所出现的数据为:
      123456789101110987654321
这也就不是一个有规律的数据阵了,我指的是单从单个数字上看,而且这个题目我感觉是应要求直接输出整个数字阵列的,而不是指定n的数值输出个单独的一行数字,如果在n的最大值为9的时候,这样一切都有规律的时候,楼上美女的那个参考函数就为多余的,应该在主函数中直接让值从1开始,在循环中增加到指定的值,这样就直接输出整个类金字塔数字阵。

二、楼主所说的程序如果是按照1*1=1,11*11=121,111*111=12321,1....1*1....=....所得的,也就是值n个1和n个1相乘(这里n从1开始),那所出的数据并不是按照楼上所说的具有规律性,比如:
n=10 数字应该为 12345678900987654321
n=11 数字应该为 123456790120987654321
这是我个人的一点疑问,呵呵。


[此贴被 幻想笨蛋(ziaichen) 在 01月07日11时50分 编辑过]

B7层 发表时间: 08-01-07 11:47

回复: listenwind [listenwind]   论坛用户   登录

代码:


        for(i=1;i<=n;++i)
          {
          for( j=1;j<=i-1;++j)  
          cout<<" "<<j;
          for( k=i;k>=1;--k)
          cout<<" "<<k;
cout<<endl;
          }


红色地方代表输出空格,数字间有了空格就不易混淆,算是有规律吧?

楼上朋友所说的矩阵输出的算法具体是什么?

好久没来了  晕晕的!

B8层 发表时间: 08-01-21 14:21

回复: listenwind [listenwind]   论坛用户   登录
1*1=1,11*11=121,111*111=12321,1....1*1....=....
这里是不是需要用到运算符重载?

至少我是这样理解的,请指教,谢谢!

B9层 发表时间: 08-01-21 14:24

论坛: 编程破解

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号