| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 2532 人关注过本帖
标题:如何用三进制数的形式来表达以下的一组数组群
只看楼主 加入收藏
自学的数学
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:46
帖 子:967
专家分:4146
注 册:2017-11-15
结帖率:93.33%
收藏
已结贴  问题点数:30 回复次数:15 
如何用三进制数的形式来表达以下的一组数组群
有以下一组数组群(每一行是一个一维数组):
i = 1    0   0   0   0   0   0   0   0   0   0   0
i = 2    0   0   0   0   0   1   1   0   0   0   0
i = 3    0   0   0   0   0   2   2   0   0   0   0
i = 4    0   0   0   0   1   0   0   1   0   0   0
i = 5    0   0   0   0   1   1   1   1   0   0   0
i = 6    0   0   0   0   1   2   2   1   0   0   0
i = 7    0   0   0   0   2   0   0   2   0   0   0
i = 8    0   0   0   0   2   1   1   2   0   0   0
i = 9    0   0   0   0   2   2   2   2   0   0   0
i = 10   0   0   0   1   0   0   0   0   1   0   0
i = 11   0   0   0   1   0   1   1   0   1   0   0
i = 12   0   0   0   1   0   2   2   0   1   0   0
i = 13   0   0   0   1   1   0   0   1   1   0   0
i = 14   0   0   0   1   1   1   1   1   1   0   0
i = 15   0   0   0   1   1   2   2   1   1   0   0
i = 16   0   0   0   1   2   0   0   2   1   0   0
i = 17   0   0   0   1   2   1   1   2   1   0   0
i = 18   0   0   0   1   2   2   2   2   1   0   0
i = 19   0   0   0   2   0   0   0   0   2   0   0
i = 20   0   0   0   2   0   1   1   0   2   0   0
i = 21   0   0   0   2   0   2   2   0   2   0   0
i = 22   0   0   0   2   1   0   0   1   2   0   0
i = 23   0   0   0   2   1   1   1   1   2   0   0
i = 24   0   0   0   2   1   2   2   1   2   0   0
i = 25   0   0   0   2   2   0   0   2   2   0   0
i = 26   0   0   0   2   2   1   1   2   2   0   0
i = 27   0   0   0   2   2   2   2   2   2   0   0
 。。。。。。
 。。。。。。
i = 238   0   2   2   2   1   0   0   1   2   2   2
i = 239   0   2   2   2   1   1   1   1   2   2   2
i = 240   0   2   2   2   1   2   2   1   2   2   2
i = 241   0   2   2   2   2   0   0   2   2   2   2
i = 242   0   2   2   2   2   1   1   2   2   2   2
i = 243   0   2   2   2   2   2   2   2   2   2   2
备注,这里用了省略号,不然内容太长。
数组规律,每个一维数组的首项都是0,首项后面共计10个数,前5个数是以3进制数的形式依次往前递增,后5个数是以该行前5个数相反的形式出现的。
由于内容长,可以用:
 FILE *fp;
    if ((fp = fopen ("D:\\数组.txt", "w+")) == NULL)//E
    {
        printf("打开文件失败\n");
        exit(1);
    }
的形式保存在硬盘。
请问如何编程?
还有,这是用三进制数的形式来表示的,如何修改个别地方,就可以完成用四进制,五进制。。。都可以完成类似的编程。
搜索更多相关主题的帖子: 个数 数组 表达 进制 形式 
2020-11-24 15:20
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9011
专家分:53957
注 册:2011-1-18
收藏
得分:30 
程序代码:
#include <stdio.h>

void foo( unsigned n )
{
    for( unsigned i=0; i!=n*n*n*n*n; ++i )
        printf( "i = %u%4u%4u%4u%4u%4u%4u%4u%4u%4u%4u\n", i+1
            , i/(n*n*n*n)%n, i/(n*n*n)%n, i/(n*n)%n, i/(n)%n, i/1%n
            , i/1%n, i/(n)%n, i/(n*n)%n, i/(n*n*n)%n, i/(n*n*n*n)%n );
}

int main( void )
{
    foo( 3 );
}
2020-11-24 16:32
自学的数学
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:46
帖 子:967
专家分:4146
注 册:2017-11-15
收藏
得分:0 
回复 2楼 rjsp
不对,题目要求是这样的:
i = 1    0   0   0   0   0   0   0   0   0   0   0
i = 2    0   0   0   0   0   1   1   0   0   0   0
i = 3    0   0   0   0   0   2   2   0   0   0   0
i = 4    0   0   0   0   1   0   0   1   0   0   0
i = 5    0   0   0   0   1   1   1   1   0   0   0
i = 6    0   0   0   0   1   2   2   1   0   0   0
i = 7    0   0   0   0   2   0   0   2   0   0   0
i = 8    0   0   0   0   2   1   1   2   0   0   0
i = 9    0   0   0   0   2   2   2   2   0   0   0
i = 10   0   0   0   1   0   0   0   0   1   0   0
i = 11   0   0   0   1   0   1   1   0   1   0   0
i = 12   0   0   0   1   0   2   2   0   1   0   0
i = 13   0   0   0   1   1   0   0   1   1   0   0
i = 14   0   0   0   1   1   1   1   1   1   0   0
i = 15   0   0   0   1   1   2   2   1   1   0   0
i = 16   0   0   0   1   2   0   0   2   1   0   0
i = 17   0   0   0   1   2   1   1   2   1   0   0
i = 18   0   0   0   1   2   2   2   2   1   0   0
i = 19   0   0   0   2   0   0   0   0   2   0   0
i = 20   0   0   0   2   0   1   1   0   2   0   0
i = 21   0   0   0   2   0   2   2   0   2   0   0
i = 22   0   0   0   2   1   0   0   1   2   0   0
i = 23   0   0   0   2   1   1   1   1   2   0   0
i = 24   0   0   0   2   1   2   2   1   2   0   0
i = 25   0   0   0   2   2   0   0   2   2   0   0
i = 26   0   0   0   2   2   1   1   2   2   0   0
i = 27   0   0   0   2   2   2   2   2   2   0   0
。。。
i = 238   0   2   2   2   1   0   0   1   2   2   2
i = 239   0   2   2   2   1   1   1   1   2   2   2
i = 240   0   2   2   2   1   2   2   1   2   2   2
i = 241   0   2   2   2   2   0   0   2   2   2   2
i = 242   0   2   2   2   2   1   1   2   2   2   2
i = 243   0   2   2   2   2   2   2   2   2   2   2

i = 238   0   2   2   2   1   0   0   1   2   2   2
i = 239   0   2   2   2   1   1   1   1   2   2   2
i = 240   0   2   2   2   1   2   2   1   2   2   2
i = 241   0   2   2   2   2   0   0   2   2   2   2
i = 242   0   2   2   2   2   1   1   2   2   2   2
i = 243   0   2   2   2   2   2   2   2   2   2   2

每一行第一个数是0,你这里第一个数的0去哪里了?

[此贴子已经被作者于2020-11-26 16:27编辑过]

2020-11-26 16:24
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9011
专家分:53957
注 册:2011-1-18
收藏
得分:0 
你自己加个零不行吗?

"i = %u%4u%4u%4u%4u%4u%4u%4u%4u%4u%4u\n"
改为
"i = %u   0%4u%4u%4u%4u%4u%4u%4u%4u%4u%4u\n"
2020-11-26 16:32
自学的数学
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:46
帖 子:967
专家分:4146
注 册:2017-11-15
收藏
得分:0 
还有题目说了,每一行要用数组来表示(用数组来表示是为了以后方便于计算的定位需要,比如a[0],a[15]等等)。你这里呢?干巴巴几个数和成一行。不方便计算啊。
2020-11-26 16:52
自学的数学
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:46
帖 子:967
专家分:4146
注 册:2017-11-15
收藏
得分:0 
我想到一个办法,其实可以这样理解:
    本体是要将0到243共计244个十进制数先转换为三进制数,再将转换后的三进制数安位存入一维数组中,存入时,注意本题的条件:
    1:每个一维数组的首项都是0.
    2:后5个数是以该行前5个数相反的形式出现的。
2020-11-28 15:03
自学的数学
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:46
帖 子:967
专家分:4146
注 册:2017-11-15
收藏
得分:0 
简单写了一下, 把一个数转换为三进制数后,存入数组的情况。
程序代码:
#include "stdio.h" 

 main() {
    int a, b[100],i=0,j;
    printf("请输入一个十进制数:");
    scanf("%d",&a);
    while(a)
    {
    b[i]=a%3;
    a/=3;
    i++;
    } 
   for(j=i-1;j>=0;j--)
        printf(" %d",b[j]);    
    printf("\n ");
   for(j=0;j<i;j++)
        printf(" b[%d]= %d",j,b[j]);     
}

只是输出的时候,是反向的了。
2020-11-29 16:09
自学的数学
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:46
帖 子:967
专家分:4146
注 册:2017-11-15
收藏
得分:0 
反向输出的问题终于解决了:

程序代码:
#include "stdio.h" 

 main() {
    int a, b[100],i=0,j,c[100],d;
    printf("请输入一个十进制数:");
    scanf("%d",&a);
    while(a)
    {
     b[i]=a%3;
    a/=3;
    i++;
    } 
   for(j=i-1;j>=0;j--)
        printf(" %d",b[j]);    
    printf("\n ");
    for(j=i;j>0;j--)    
        d=i-j;
    for(d=0;d<i;d++)
      {
          c[d]=b[i-d-1];
        printf(" c[%d]= %d",d,c[d]);
      }      
}


[此贴子已经被作者于2020-12-1 20:03编辑过]

2020-12-01 19:55
自学的数学
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:46
帖 子:967
专家分:4146
注 册:2017-11-15
收藏
得分:0 
程序代码:
#include "stdio.h" 


 main() {
    int a, b[11],i=0,j,c[11],d,e[11];
    printf("请输入一个十进制数:");
    scanf("%d",&a);
    e[0]=0;
    while(a)
    {
     b[i]=a%3;
    a/=3;
    i++;
    } 
   for(j=i-1;j>=0;j--)
        printf(" %d",b[j]);    
    printf("\n ");
    for(j=i;j>0;j--)    
        d=i-j;
    for(d=0;d<i;d++)
      {
          c[d]=b[i-d-1];
        printf(" c[%d]= %d",d,c[d]);
      } 
      printf("\n ");
      for(j=0;j<5;j++)  
         {
             e[j+1]=c[j];    
             e[11-j-1]=c[j];
         }
      for(j=0;j<11;j++) printf(" e[%d]= %d",j,e[j]);
}

这里,转换后的三进制数如果是五位数,就没问题,否则,就不对,请问,该怎么改??谢谢!!
2020-12-02 20:59
自学的数学
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:46
帖 子:967
专家分:4146
注 册:2017-11-15
收藏
得分:0 
现在楼上的问题解决了,如下:
程序代码:
#include "stdio.h" 

 main() {
    int a, b[11],i=0,j,c[11],d,e[11]={0};
    printf("请输入一个十进制数:");
    scanf("%d",&a);
   while(a)
    {
     b[i]=a%3;
    a/=3;
    i++;
    } 
   for(j=i-1;j>=0;j--)
        printf(" %d",b[j]);    
    printf("\n ");
    for(j=i;j>0;j--)    
        d=i-j;
    for(d=0;d<i;d++)
      {
          c[d]=b[i-d-1];
        printf(" c[%d]= %d",d,c[d]);
      } 
      printf("\n ");
      for(j=i;j>=0;j--)  
         {
            e[j+6-i]=c[j];     
            e[11-j-6+i]=c[j];    
         }
      for(j=0;j<11;j++) printf(" e[%d]= %d",j,e[j]);
}

但是,如果输入为0呢,程序没有输出,但是题目对于0是有输出的,这个问题有要好好考虑一番了。
2020-12-03 20:33
快速回复:如何用三进制数的形式来表达以下的一组数组群
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019921 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved