回 帖 发 新 帖 刷新版面

主题:请高手看下我这里哪里错了

题目是比如输入4,依次类推
4 4 4 4 4 4 4
  3 3 3 3 3 
    2 2 2 
      1  
    2 2 2 
  3 3 3 3 3
4 4 4 4 4 4 4



#include<stdio.h>
main()
{
    int x,a[100][200],i,j;
    printf("input hang=");
    scanf("%d",&x);
    for(i=0;i<x;i++)
    {
        for(j=1;j<=2*(x-i-1)+1;j++)
            a[i][j]=x-i;
    }
    for(i=0;i<x;i++)
    {
        for(j=1;j<i+1;j++) printf(" ");  
        for(j=1;j<=2*(x-i-1)+1;j++)
            printf("%d",a[i][j]);
        printf("\n");
    }
    for(i=x-1;i>=0;i--)
    {
        for(j=1;j<i+1;i++) printf(" ");
        for(j=i+1;j<=2*(x-i)+1;j++);
           printf("%d",a[i][j]);
        printf("\n");
    }
}


    

回复列表 (共16个回复)

11 楼

使用递归实现:

#include<stdio.h>
/*
input:

output:
4 4 4 4 4 4 4
  3 3 3 3 3
    2 2 2
      1
    2 2 2
  3 3 3 3 3
4 4 4 4 4 4 4
*/

void print(const int n, const int max);
void show(const int n, const int max);
int main(void)
{
    int n;// = 4;
    printf("input an integer between: 1 and 9: \n");

    scanf("%d", &n);

    print(1, n);

    return 0;
}

void show(const int n, const int max)
{
    int j = 0;
    for(j=0; j<n-1; j++)
    {
        printf("  ");
    }
    for(j=2*(max-n+1)-1;j>0;j--)
    {
        printf("%d ", max-n+1);
    }
    printf("\n");
}

void print(const int n, const int max)
{
    show(n, max);

    if(n<max)
    {
        print(n+1, max);
    }
    else
        return;

    show(n, max);
}

12 楼


不错哦~~

13 楼

为什么不:
for(int i = -4 ; i < 5; ++i)
呢:)

14 楼

如果是输出到屏幕的话,并且输入的n最大为9,可以写成这样:
[code=c]
#include <stdio.h>
#include <stdlib.h>

int main( void )
{
  const char * ss[] = { 
    NULL
    , "1"
    , "2 2"
    , "3 3 3"
    , "4 4 4 4"
    , "5 5 5 5 5"
    , "6 6 6 6 6 6"
    , "7 7 7 7 7 7 7"
    , "8 8 8 8 8 8 8 8"
    , "9 9 9 9 9 9 9 9 9"
  } ;

  int n, i;
  
  printf( "input an integer between: 1 and 9: " );
  scanf ( "%d" , &n );

  if ( n < 2  ||  n > 9 ) 
    {
    fprintf( stderr ,"input wrong" );
    exit( -1 );
    }

  for ( i = n ; i >= 1 ; --i )    /* 从n到1输出 */
    printf( "%*s\b%s \n" ,2*n-1 ,ss[i] ,ss[i] );

  for ( i = 1 ; ++i <= n ; )     /* 从2到n输出 */  
    printf( "%*s\b%s \n" ,2*n-1 ,ss[i] ,ss[i] );

  return 0;
}[/code]

15 楼

! 给个FORTRAN的实现,仅供娱乐:
Subroutine prntNum(n)
    Integer            n,i,width,count
    Character*128        fmt
    Integer            dat(n*2)
    width=log10(n*100.0)
    Do i=-n+1,n-1
        count=Abs(i)+1
        Write(fmt,'(A,3(I0,A))')'(',(n-count)*width,'X,',count*2-1,'I',width,')'    ! 生成格式化串
        dat(1:count*2-1)=count                                    ! 生成待输出数据
        Write(*,fmt)dat(1:count*2-1)                                ! 向屏幕输出1行:)
    End Do
End Subroutine

16 楼

其实C也可以做类似F的东东,楼主不妨自己想想?

我来回复

您尚未登录,请登录后再回复。点此登录或注册