标题:如何用三进制数的形式来表达以下的一组数组群
只看楼主
自学的数学
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
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
得分:0 
这么一个简单的问题弄到现在吗?楼主11楼代码和一楼问题不一致,0会输出随机数,1应该输出00000000000。
下述代码也和一楼问题不一致,0输出0,1输出1,3输出00001001000(问题太简单,不要支付什么了).
程序代码:
#include "stdio.h" 

void ff(int *a,int n)
{//十进制数n转换为三进制镜像存储到数组a中
    int i;
    for (i = 0; i < 11; i++)a[i] = 0;
    for (i = 0; n; n /= 3, i++)a[5 - i] = a[6 + i] = n % 3;
}
void main() {
    int a, b[11], i = 0, j, c[11], d, e[11] = { 0 };
    for (i = 0; i < 243; i++, printf("\n"))
    {
        ff(e, i);
        for (j = 0; j < 11; j++) printf("%d  ", e[j]);
    }
}

能编个毛线衣吗?
2020-12-19 18:24
自学的数学
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:46
帖 子:967
专家分:4146
注 册:2017-11-15
得分:0 
    我是搞数学科研的,为了研究数学问题,才来自学C语言编程,基础差,没办法。有了你这段代码,我后面的工作就好做了。
    通过多年的研究,我觉得不论是数学,还是编程,都要具备发散思维。今后你会明白的。
    所以,请老师留下你的微信号。
    我将你的代码修改如下,这样就更能符合题意了:
程序代码:
#include "stdio.h" 
#include <stdlib.h>  
void ff(int *a,int n)
{//十进制数n转换为三进制镜像存储到数组a中
    int i;
    for (i = 0; i < 11; i++)a[i] = 0;
    for (i = 0; n; n /= 3, i++)a[5 - i] = a[6 + i] = n % 3;
}

 main() {
    int a, b[11], i = 0, j, c[11], d, e[11] = { 0 };
    FILE *fp;
    if ((fp = fopen ("D:\\b.txt", "a+")) == NULL)
    {
        printf("打开文件失败\n");
        exit(1);
    }
    for (i = 0; i < 243; i++, fprintf(fp,"\n"))
    {
        ff(e, i);
        fprintf(fp,"i = %d ",i);
        for (j = 0; j < 11; j++) fprintf(fp, "%d ", e[j]);
    }
}
2020-12-20 14:53
do8do8do8
Rank: 10Rank: 10Rank: 10
来 自:沙滩
等 级:贵宾
威 望:17
帖 子:366
专家分:1845
注 册:2010-7-2
得分:0 
代码已经被大神们写透了,哈,我就不献丑了
只是楼主,你搞数学的,用R语言吧,那个自带图形功能杠杠的
要不用lisp,这两种语言的思维方式可以让你思维更发散,哈

学C语言从底层开始,学编程从问题开始,一日学会C!!!
2020-12-20 16:00
自学的数学
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:46
帖 子:967
专家分:4146
注 册:2017-11-15
得分:0 
程序代码:
#include "stdio.h" 
#include <stdlib.h>  
void ff(int *a,int n)
{//十进制数n转换为三进制镜像存储到数组a中
    int i,p=11,s,t;
    if(( p%2 )==1) s= (p-1)/2;
       else s= p/2;
     for(i=1;i<s+1;i++)
       t=t*2;
   t=t+1;
    for (i = 0; i < p; i++)a[i] = 0;
    for (i = 0; n; n /= 3, i++)a[s - i] = a[s + i+1] = n % 3;
}

 main() {
    int a, b[11], i = 0, j, c[11], d, e[11] = { 0 },p=11,s,t,u=1;
    FILE *fp;
    if ((fp = fopen ("D:\\11.txt", "a+")) == NULL)
    {
        printf("打开文件失败\n");
        exit(1);
    }
     if(( p%2 )==1)  s= (p-1)/2;
       else s= p/2;
     for(i=1;i<s+1;i++)
       t=t*2;
   t=t+1;
   while(s)
   {
       u=u*3;
       s=s-1;
   }
    for (i = 0; i < u; i++, fprintf(fp,"\n"))
    {
        ff(e, i);
        fprintf(fp,"i = %2d ",i);
        for (j = 0; j < p; j++) fprintf(fp, "%4d ", e[j]);
    }
}


将函数里面的 int i,p=11,s,t;和
主程序里面的 int a, b[11], i = 0, j, c[11], d, e[11] = { 0 },p=11,s,t,u=1;和"D:\\11.txt
所对应的关键数字全部换成你想要的任何奇数A(本代码处A=11),就可以完成每一行的数组的元素个数为A,由此共要多少个这样的数组,本代码都为你计算好了,非常省事(半分钟就可以搞定)。
2021-01-03 22:55



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




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

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