回 帖 发 新 帖 刷新版面

主题:[讨论]GCC入门题部分题目解答

以下程序在VC6.0环境下测试通过
若出现程序编译不了,或需要注释的,可以加Q634419082
//////////////////////////////////////////////////////////////////////////////
//
//  1.  给定等式    A B C D E     其中每个字母代表一个数字,且不同数字对应不
//                      D F G     同字母。编程求出这些数字并且打出这个数字的
//          /    +      D F G     算术计算竖式。
//               ───────
//                  X Y Z D E
//////////////////////////////////////////////////////////////////////////////
//
//  (DE+FG+FG)%100 = DE -> FG = 50 
//  Z = (C+D+D+1)%10
//  Y = ((C+D+D+1)/10 + B)%10 && Y != 0 && Z != 0 
//    -> B == 9 && C +D +D +1 > 20 ->  C >= 5 && D >= 5
//  X != A ->X = A+1
//  E = 45 - (A +9 + C +D +E + 5 +0 +X +Y +Z) = 31 - A -C -D -E -X -Y -Z
/////////////////////////////////////////////////////////////////////////////
#include "stdio.h"
void main()
{
    unsigned int a, c, d, e, x, y, z;

    printf("%10s\n", "A B C D E"); 
    printf("%10s\n", "D F G");
    printf("+%9s\n", "D F G");
    printf("%10s\n", "───────");
    printf("%10s\n\n\n", "X Y Z D E");

    for(a = 1; a < 9; a++)
    {
        if(a == 5)
            continue;
        for(c = 5; c < 9; c++)
        {
            if(c == a )
                continue;
            for(d = 5; d < 9; d++)
            {
                if(d == a || d == c)
                    continue;
                x = a +1;
                y = ((c +2*d +1)/10 + 9)%10;
                z = (c +2*d +1)%10;
                e = 31-a-c-d-x-y-z;
                if(x != a && y != a && z != a && e != a
                    && x != 9 && y != 9 && z != 9 && e != 9
                    && x != c && y != c && z != c && e != c
                    && x != d && y != d && z != d && e != d
                    && x != 5 && y != 5 && z != 5 && e != 5
                    && x != 0 && y != 0 && z != 0 && e != 0                    
                    && x != y && x != z && x != e && y != z
                    && y != e && z != e
                    && 10000*a +9000   +100*c +10*d +e +2*(100*d +50)
                    == 10000*x +1000*y +100*z +10*d +e)
                {
                    printf("%2d%2d%2d%2d%2d\n", a, 9, c, d, e);
                    printf("%*d%2d%2d\n", 6, d, 5, 0);
                    printf("+%*d%2d%2d\n", 5, d, 5, 0);
                    printf("%10s------------\n", "------------");
                    printf("%2d%2d%2d%2d%2d\n", x, y, z, d, e);
                }
            }
        }
    }
}

回复列表 (共144个回复)

101 楼

[quote]to vcacm :请注意题目中的“统计个数”字样[/quote]
看花了眼!

102 楼

自己作的第3体递归~~比楼主的差多了~~主要是练练自己的思维
见笑


#include <stdio.h>

#define M 20

char a[M][M];

int fuback(int k,int n,char u)
{
    int i;
    if(k==0) u='T';
    if(k==1) u='J';

        for(i=k;i<n;i++)
            {
                a[k][i]=u;
                a[i][k]=u;
                a[i][n-1]=u;
                a[n-1][i]=u;

            }
            if(k==1)u='0';

    if(k!=((M+1)/2)){fuback(k+1,n-1,u+1);} //无论奇偶都执行到最里面的k!=((M+1)/2);
    else return 0;

}


int main(int argc, char *argv[])
{
    char ut='0';//初始化字符变量,全靠它

    int nt=M;//宽度
    int kt=0;//表示由内到外的层数
    int h,j;

    fuback(kt,nt,ut);//递归

    for(h=0;h<M;h++)
    {
        for(j=0;j<M;j++)
        {
            printf("%c",a[h][j]);
            printf("  ");
        }
        printf("\n");
    }
    return 0;
}

103 楼

这是我写的第4题

#include<stdio.h>

int main()
{
    int i,j,n,p,num;
    printf("please enter a number\n");
    scanf("%d",&num);
    
    for (i=1;i<=num;i++)
    {
        n=i;
        p=0;
        for (j=1;j<=num;j++)
        {
            if(n<=num) printf("%d",n++);
            else  printf("%d",++p);
        }
        printf("\n");
    }
    
    getchar();
    getchar();
    return 0;
}
本人初学,如有不对之处还望各位大侠指出

104 楼

谢谢楼主分享!
自己先研究研究,等做好了在参照你的

105 楼

我做的第三题:
[quote]
#include <stdio.h>
    
    #define MAX 101
    
    int main(int argc, char **argv)
    {
        int  st[MAX][MAX];
        int  s[MAX] ;
        int N , i,j,k,l ;
        
        scanf("%d",&N);
        
        for(i=2 ; i<= MAX ;i++)
        s[i] = i-1 ;
        s[0] =  'T';
        s[1] =  'J';

        for(i=N,j=0,l=1; i>=1; i--,j++, l++)
        {
            
            for(k= l; k<= i ; k++)
            st[k][l] = st[k][i]= s[j] ;
            
            for(k= l+1 ; k<= i-1 ; k++)
            st[l][k] = st[i][k] = s[j] ;

        
        }
        
        
        for(i= 1; i<= N  ; i++)
        {
            for(j = 1; j<= N ; j++)
            {
            if(st[i][j]== 'J' || st[i][j]== 'T')    
            printf("%4c",st[i][j]);
            else
            printf("%4d",st[i][j]);
            }
        

            
            printf("\n");
        }
        
        
        return 0;
    }    
[/quote]

106 楼

我做的第一题:
通过推理可知:
F=5,G=0,Y=1,X=A+1,B= 9 ;
[quote]
#include <stdio.h>
    #define MAX 11
     
    int A,B,C,D,E,F,G,X,Z,Y;

    int compute (int *a, int *b,int *sum)
    {
        int i,j,index=0;
        
        for(i=1 ; i<=3 ;i++)
        {
            sum[++index] = a[i]+2*b[i] ;
        }
        
        for(j = 4 ; j <= 5 ; j++)
        sum[j] = a[j] ;
    
        for(i=1 ; i<=index; i++)
        if(sum[i] >= 10)
        {
            if(sum[index] >= 10)
            index ++ ;
            sum[i+1] += sum[i] / 10 ;
            sum[i] %= 10 ;
        }
        
        if(sum[1]==E && sum[2]== D && sum[3] == Z
            && sum[4] == Y && sum[5] == X)
        return 1 ;
        else
        return 0 ;
    }

    void output(int *a,int *b , int *sum)
    {
        int i,j;
        
        printf("\n\n=============The result is ============\n\n");
 
        for(i=5 ;i>=1 ; i--)
        printf("%3d",a[i]);
        printf("\n");
        printf("\n%9d%3d%3d\n",b[3],b[2],b[1]);
        printf("\n+%8d%3d%3d\n",b[3],b[2],b[1]);
        printf("__________________________\n");
        printf("\n");
        for(j=5 ; j>=1 ;j--)
        printf("%3d",sum[j]);
        printf("\n\n");
        
    }
        
    void Init ( int *a, int *b , int *sum)
    {
        memset(a,0,sizeof(a) );
        memset(b,0,sizeof(b) );
        memset(sum,0, sizeof(sum) );
    }    
        
    [/quote]

107 楼

    [quote]
    续.........
    int main()
    {
        //int A,B,C,D,E,F,G;
        int a[MAX],b[MAX],sum[MAX];
        int flag = 0;
        
        Init ( a, b, sum) ;
        
        printf("\n===========Begin to compute the express !==========\n");

        printf("   A  B  C  D  E \n");
        printf("     D  F  G \n");
        printf("   +     D  F  G \n");
        printf("   --------------\n");
        printf("   X  Y  Z  D  E \n");
        
        B = 9 ;
        G = 0 ;
        F = 5 ;
        Y = 1 ;
        for(A = 2 ; A < 8 ; A++)
         if(A != F)
         {
             X = A+1 ;    
            
            for(C=6 ; C<= 8 ; C++)
             if(C != A && C != X )
             {
                for(D = 6 ;D <= 8 ; D++)
                if(D != A && D!= C && D!=X)
                {
                    for(E = 2 ; E<= 8 ; E++)
                     if(E != F && E!= A && E!= C && E!= D && E!=X)
                      {
                        for(Z = 2 ; Z<= 8 ; Z++)
                        {
                        if(Z != X && Z!= Y && Z!= A && Z!=B && Z!=C && Z!=D && Z!=E
                            && Z!= F && Z!= G )
                        {
                        a[1] = E ; a[2] = D ; a[3] = C ; a[4] = B ; a[5] = A ;
                        b[1] = G ; b[2] = F ; b[3] = D ;
                        
                        flag = compute(a,b,sum) ;        
                        
                        
                        if(flag)
                        
                        goto end ;
                        
                        else
                        Init(a,b,sum);
                        
                        
                        }
                        }
                    }
                }
             }
        }
        
        end :
        if(flag)
        output(a,b,sum);
        else
        printf("\nNO ANSWERS!\n");
    
        
        return 0;
    }

比较沉.....
[/quote]

108 楼

[quote]
以下几道题不知道自己的想法是不是太天真了
//////////////////////////////////////////////////////////////////////////////
//
// 37. 已知 N 个正整数满足 K1+K2+...+Kn=M。求一组最佳的分解,使得
// K1*K2*....*Kn 为最大。
//   例如:N=2时,给定 K1+K2=6,当 K1=3,K2=3 时,K1*K2=9 为最大
//////////////////////////////////////////////////////////////////////////////
#include "stdio.h"
#include "assert.h"
void main()
{
    unsigned int n ,sum, mod, i;
    unsigned long product =1;
    printf("input N and SUM spaced by space [N <= SUM]:");
    scanf("%d %d", &n, &sum);
    unsigned int *a = new unsigned int[n];
    assert(sum >= n);
    for(i = 0; i < n; i++)
        a[i] = sum/n;
    mod = sum%n;
    for(i = 0; i < mod; i++)
        a[i] += 1;
    for(i = 0; i < n; i++)
    {
        printf("%-5d", a[i]);
        product *= a[i];
    }
    printf("\nthe maximal product is %ld\n", product);
}


[/quote]

均值定理:

当a>b>e(自然对数)时,a的b次方大于b的a次方,如3*3*3*3>4*4*4,而2*2*2<3*3,故多分出3!
由于N是由键盘输入,所以要分情况讨论:
(1) . 当N =M /3 时,M= 3+3+....+3 ( N个3相加)时, 把M全部分成3,即可得到最大值!
(2) . 当N < M / 3 时, 尽可能地多分成3相加!


109 楼

[quote]
//////////////////////////////////////////////////////////////////////////////
//
// 74. (NOI'95.1_5) m、n为整数,且满足下列两个条件:
//  ① m、n∈{1, 2, …, k}, (1≤k≤109)
//    ② (n^2-m*n-m^2)^2=1
//    编一程序, 由键盘输入k, 求一组满足上述两个条件的 m、n, 并且使m^2+n^2
// 的值最大.
//    例如, 若 k=1995, 则 m=987, n=1597 时, 则 m、n 满足条件, 且可使
// m^2+n^2的值最大.
//////////////////////////////////////////////////////////////////////////////
#include "stdio.h"
void main()
{
    int m, n, k;
    scanf("%d", &k);
    for(m = k; m >0; m--)
        for(n = m+1; n <= k; n++)
            if(((n+m)*(n-m)-m*n) == 1)
            {
                printf("m = %4d  n = %4d\n", m, n);
                return;
            }
}
[/quote]

[code]
楼主:
这题没那么简单吧!
题目的要求是:
(1)满足1,2条件;
(2)要使 M ^2 + N ^2 最大;
[/code]

110 楼

我做的第二十四题:
[code]

/*&&&&&&&&        N 后问题解答     &&&&&&&&&&*/
         
    #include <stdio.h>
    #include <math.h>
    #include <time.h>
          
    #define MAX 10001
    
    #define true 1
    #define false 0
    #define MAX_N  100
      
    int N,sum=0;
    int a[MAX] ;
            
    int flag (int k )
    {
        int j ;
            
        for( j = 1 ; j< k ; j++)
        if( (abs(k-j) == abs (a[j]-a[k]) ) || a[j] == a[k] )
        return false ;
             
        return true ;
    }
    
    void output( )
    {
        int i,j,k ;
        char m[MAX_N][MAX_N] ;
        
        //memset(m , '+', sizeof(char)*(N+1) );
        
        for(k=1 ; k<=N ; k++)
        for(j=1 ; j<=N ; j++)
        m[k][j] = '#' ;
              
        for(i= 1 ; i<=N ; i++)
        m[i][a[i]]='Q' ;
        
        for(i= 1 ; i<=N ; i++)
        {
            for(j=1 ; j<=N ; j++)
            printf("%5c",m[i][j]);
            printf("\n\n");
        }
        
    }    
    
    void backtrack (int n)
    {
        int i,j ;
        if( n > N )
        {
            sum ++ ;
            
            printf("\n\n=============The %d of graph is========\n\n",sum);
 
            output() ;
            
            //memset(a , 0 , sizeof(a) ) ;
        }
                
        else
        for( i= 1 ;i<=N ;i++)
        {
            a[n] = i ;
            if( flag(n) )
            backtrack( n + 1) ;
        }
    }        
                
               
    int main(int argc, char *argv[] )
    {
        
        int i,j,k ;
        clock_t end , begin ;
        printf("Please Input the num of n :    ");
                 
        scanf("%d", &N );
        
        begin = clock();
               
        backtrack (1) ;
        
        end = clock() ;
        printf("\nThe n of %d has %d kind sulation!\n",N , sum );    
        printf("\nThe program has run %f seconds !\n\n",(double)(end-begin)/1000) ;
                
        return 0 ;
    }

[color=AAAFFF]打成的图较好看一些!
[/color]

[/code]

我来回复

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