回 帖 发 新 帖 刷新版面

主题:ACM试题,与大家分享

试题 也许是因为有 10 个手指的原因,所以我们把 0~9 十个数字组合起来表达任意的数值,但这
并不是唯一可能的记数法。在某个外星球居住着一种智慧生物,他们的手跟我们的手构造不同,他们
的记数法也很奇特。他们用三个记号’0’,’1’,’-’的组合来表达数值,这三个记号分别对应数值 0,1,-1。在
他们的数值系统中,每个数位是右边相邻数位的 3 倍。因此数’10-’表示数值 8(因为 8=1 9+0 3
+-1 1),数’-1’表示数值-2(因为-2= -1 3+1 1)。 
31 31
编写程序,读入一组-2
至 2 -1 之间的数值,输出对应的外星球数值表示。 
 
输入:每行一个 10 进制数值 
 
输出:每行一个与输入文件对应的外星球数值表示 
 
示例 
输入: 
10 

-17 
42 
1024 
-2147483648 
 
输出: 
101 
1- 
-101 
1---0 
111-0-1 
-10110100011---1-1--1 
如果大家喜欢,我还有。

回复列表 (共4个回复)

沙发

在哪个ACM?

#include <stdio.h>

void ufocode (int n)
{
    int r;

    if (n == 0)
        return;
    r = n % 3;
    n = n / 3 + (r == 2) - (r == -2);
    ufocode (n);
    if (r == 2 || r == -1)
        printf ("-");
    else if (r == -2)
        printf ("1");
    else
        printf ("%c", r + '0');
}

int main ()
{
    ufocode (-17);
    printf ("\n");

    return 0;
}

我今天买了份电脑报,上面有一道这样的题,跟这道异曲同工:
法国数学家梅齐亚克在他著名的《数字组合游戏》中提出了一个问题:一位商人有一个重40磅的砝码,一天不小心将砝码摔成了四块。后来商人称得每块的重量都是整磅数,而且发现这四块碎片可以在天平上称1至40磅之间任意重量的物品。请问这四块碎片各重多少?

板凳

楼上的,不错,这道题是我们湖南省首界程序设计大塞试题,它的性质如ACM。
今年是第二界。

3 楼

2楼的
你也很不错啊,看来,你是参加第2界的选手咯?

4 楼

这是我写的一份,帮我看看哪里有问题:)
#include "stdafx.h"
#include "stdio.h"
#include "conio.h"
#include "stdlib.h"

void spe_num(int n)
{
    int i,sn=0;char sq[10];
    
    while(n>=-2)
    {
        sq[sn++]=n/3+'0';
        n%=3;
    }
    for(i=0;i<sn;i++)
    {
        if(sq[i]==(2+'0')||sq[i]==(-1+'0')){printf("-");}
        else if(sq[i]==(-2+'0')){printf("1");}
        else {printf("0");}
    }
}
void main(int i)
{
    while(1)
    {
        scanf("%d",&i);
        if(i!=0x001b)//如果输入不是ESC,则... ...否则退出
        {
            spe_num(i);
            printf ("\n");
            }
        else exit(-1);
    }
}

我来回复

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