标题:如何用三进制数的形式来表达以下的一组数组群
取消只看楼主
自学的数学
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:46
帖 子:967
专家分:4146
注 册:2017-11-15
结帖率:93.33%
已结贴  问题点数:30 回复次数:11 
如何用三进制数的形式来表达以下的一组数组群
有以下一组数组群(每一行是一个一维数组):
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
自学的数学
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
自学的数学
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
自学的数学
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:46
帖 子:967
专家分:4146
注 册:2017-11-15
得分:0 
现在程序简化如下,对于一个数来说,得出的结论完全正确,也就是输入一个十进制数,把它转化为三进制数后,再放入一维数组里,没有任何问题,但是如何将0到242共计243个数都来完成这个工作呢?该如何使用循环语句呢?
程序代码:
#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;j>0;j--)   d=i-j;
    for(d=0;d<i;d++)   c[d]=b[i-d-1];
    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("  %d",e[j]);
}
2020-12-04 20:39
自学的数学
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:46
帖 子:967
专家分:4146
注 册:2017-11-15
得分:0 
从 现在开始,谁第一个做出来,将获得20元人民币奖励,通过微信支付。
2020-12-19 16:56



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-503993-1-1.html




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

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