zoukankan      html  css  js  c++  java
  • 和为零——USACO2.3.3

    如果n==7,则从0枚举到222222(三进制)
    0看做是空格,1看做+,2看做减号-
    若果是1 2 3+4+5+6-7,则将其前三个数合成一个数123+4+5-7(方法是使shu[n]=3,for(1->7))
    View Code
    #include<stdio.h>
    #include
    <math.h>
    int shu[10];
    int fu[10];
    int bao[10];

    int main()
    {
    int n;
    while(scanf("%d",&n)!=EOF)
    {
    int i,temp=0,first=0;
    for(i=1;i<=n-1;i++)
    {
    temp
    +=2*pow(3,i-1);
    }

    int j,max;
    max
    =temp;
    for(i=0;i<=max;i++)
    {
    temp
    =i;
    for(j=n-1;j>=1;j--)
    {
    shu[j]
    =temp%3;
    temp
    -=shu[j];
    temp
    /=3;
    }

    int add=1;
    for(j=1;j<=n-1;j++)//不是空的加入
    {
    if(shu[j]!=0)
    {
    fu[add]
    =shu[j];
    add
    ++;
    }
    }

    int shi=add;
    add
    =1;
    int f,e,k,cha,all;
    shu[n]
    =3;
    for(j=1;j<=n;j++)
    {
    all
    =0;
    f
    =j;
    while(shu[j++]==0);
    j
    --;

    cha
    =j-f;
    for(k=f;k<=j;k++)
    {
    all
    +=k*pow(10,cha);
    cha
    --;
    }
    bao[add]
    =all;
    add
    ++;
    }

    all
    =bao[1];
    for(j=2;j<=shi;j++)
    {
    if(fu[j-1]==1)
    all
    +=bao[j];
    if(fu[j-1]==2)
    all
    -=bao[j];
    }

    if(all==0)
    {
    printf(
    "1");
    for(j=1;j<=n-1;j++)
    {
    if(shu[j]==1)
    printf(
    "+");
    else if(shu[j]==2)
    printf(
    "-");
    else if(shu[j]==0)
    printf(
    " ");
    printf(
    "%d",j+1);
    }
    printf(
    "\n");
    }

    }
    }
    }
  • 相关阅读:
    解决VMwave下卡死的办法
    深度探索C++对象模型第四章:函数语义学
    cc
    tbb库的使用
    10内核同步方法
    哈希
    django 和restful framework 初始配置轻松搞定
    linux有趣动画--代码雨
    linux有趣开机图标--佛祖保佑
    Socket是什么,通俗易懂点说
  • 原文地址:https://www.cnblogs.com/huhuuu/p/1969821.html
Copyright © 2011-2022 走看看