| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 956 人关注过本帖
标题:C语言 程序哪里出错??
只看楼主 加入收藏
MuMuLee
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2016-1-16
结帖率:84.21%
收藏
已结贴  问题点数:20 回复次数:3 
C语言 程序哪里出错??
给一个整数n,问所有位上的数字的和为n的仅由3和8组成的最小的数字是什么
input
输入有多组,每组有一行。包含一个整数n(1<=n<=1000,000)
output
每组输出有一行满足条件的最小的整数,如果没有满足条件的整数就输出-1
 




#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main()
{
    int n;
    while(scanf("%d",&n)!=EOF)
    {
        int x,y,i,j,s=0,a,b;
        3*x+8*y==n;

       if(x%1==0&&y%1==0)
        {
        for(i=0;i<y;i++)
        {
            a=pow(10,i);
         s=s+8*a;
        }
        for(j=y;j<y+x;j++)
           {
            b=pow(10,j);
            s=s+3*b;
           }
        printf("%d",s);
        }

         else
        printf("-1");

    }

    return 0;
}
2016-01-19 11:08
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9008
专家分:53957
注 册:2011-1-18
收藏
得分:3 
//题:给一个整数n,问所有位上的数字的和为n的仅由3和8组成的最小的数字是什么
//设 a = "3的数目"
//设 b = "8的数目"
//有 3a + 8b = n
//其一解 a=3n, b=2n
//所以 a = 3n+8x (b=-n-3x)
//a要大于等于0,因此 3n+8x>=0,即x>=-3n/8
//'3'越少则数字越小,所以 a=3n-3n/8*8, b=(n-3*a)/8

程序代码:
#include <stdio.h>
#include <string.h>

int main( void )
{
    char s[7+1000000/8] = "3333333"; // '3'最多7个,因为每8个'3'就可以换3个'8'
    memset( s+7, '8', 1000000/8 );

    for( unsigned n; scanf("%u",&n)==1 && n>0; )
    {
        int a = 3*n-3*n/8*8;
        int b = (n-3*a)/8;
        if( b < 0 )
            printf( "-1\n" );
        else
            printf( "%.*s\n", a+b, s+7-a );
    }

    return 0;
}


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

2016-01-19 13:40
MuMuLee
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2016-1-16
收藏
得分:0 
回复 2楼 rjsp
亲 你最长的那行for写错了。。
我的程序是哪里有问题?
2016-01-19 16:43
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:3 
其实半天没看懂题意,看到前面两位的解读后才明白,稍微写下练手(输入0退出):
程序代码:
#include <stdio.h>
void main()
{
    int i3,i8,n,k;
    while(n)
    {
        i3=i8=n=k=0;
        scanf("%d",&n);
        i8=n/8;
        for(;i8&&(n-i8*8)%3;i8--);
        if(i8)
        {
            i3=(n-i8*8)/3;
            for(;i3;i3--)k=k*10+3;
            for(;i8;i8--)k=k*10+8;
            printf("%d\n",k);
        }
        else
            printf("No\n");
    }
}
11
38
14
338
17
3338
30
33888



[此贴子已经被作者于2016-1-19 22:52编辑过]


能编个毛线衣吗?
2016-01-19 22:51
快速回复:C语言 程序哪里出错??
数据加载中...
 
   



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

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