zoukankan      html  css  js  c++  java
  • [NOIP1998] 普及组

    三连击

    题目描述

    将1,2,…,9共9个数分成三组,分别组成三个三位数,且使这三个三位数构成1:2:3的比例,试求出所有满足条件的三个三位数。

    输入输出格式

    输入格式:

    木有输入

    输出格式:

    若干行,每行3个数字。按照每行第一个数字升序排列。

    输入输出样例

    输入样例#1:
    
    
    输出样例#1:
    192 384 576
    * * *
    ...
    * * *
    (输出被和谐了)

     三重循环暴力枚举数字即可。

    其实也可以枚举第一个数字,按照比例算其他两个数字。

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 using namespace std;
     5 bool bo;
     6 int main(){
     7    int a[10]={0};
     8    int i,j,k=0;
     9    bool bo;bo=true;
    10    for(i=123;i<=333;i++){
    11         a[1]=i/100;
    12      a[2]=i/10%10;
    13      a[3]=i%10;
    14      a[4]=i*2/100;
    15      a[5]=i*2/10%10;
    16      a[6]=i*2%10;
    17      a[7]=i*3/100;
    18      a[8]=i*3/10%10;
    19      a[9]=i*3%10;
    20      bo=true;
    21      for(j=1;j<=8;j++)
    22        for(k=j+1;k<=9;k++)
    23          if(a[j]==a[k]||a[j]==0||a[k]==0) bo=false;
    24      if(bo==true){
    25          cout<<a[1]<<a[2]<<a[3]<<" "<<a[4]<<a[5]<<a[6]<<" "<<a[7]<<a[8]<<a[9]<<endl;
    26      }
    27     //for(j=1;j<=9;j++) cout<<a[j];  //test
    28        
    29        
    30        }
    31     return 0;
    32 }
    三连击

    阶乘之和

    题目描述

    用高精度计算出S=1!+2!+3!+…+n!(n≤50)

    其中“!”表示阶乘,例如:5!=5*4*3*2*1。

    输入输出格式

    输入格式:

    一个正整数N。

    输出格式:

    一个正整数S,表示计算结果。

    输入输出样例

    输入样例#1:
    3
    
    输出样例#1:
    9

     裸高精乘

     1 #include<iostream>
     2 #include<cstdio>
     3 using namespace std;
     4 int a[1000]={0};
     5 int b[1000]={0};
     6 int N=0;
     7 int la=1,lb=1;
     8 void plu(int a[],int b[]){
     9     for(int i=1;i<=la||i<=lb;i++){
    10         a[i]+=b[i];
    11         if(a[i]>5&&a[i+1]==0) la++;
    12         a[i+1]+=a[i]/10;
    13         a[i]%=10;
    14     }
    15 }
    16 void muti(int n){
    17     if(n>N) return;
    18     int i;
    19     for(i=1;i<=lb;i++)
    20        b[i]*=n;
    21     for(i=1;i<=lb;i++){
    22         if(b[i]>=10){
    23             if(b[i+1]==0) lb++;
    24             b[i+1]+=b[i]/10;
    25             b[i]%=10;
    26         }
    27     }
    28     plu(a,b);
    29     muti(n+1);
    30 }
    31 int main(){
    32     int n=0;
    33     cin>>N;
    34     b[1]=1;
    35     muti(1);
    36     while(a[la]==0&&la>1)la--;
    37     for(int j=la;j>=1;j--) printf("%d",a[j]);
    38     return 0;
    39 }
    阶乘之和

    幂次方

    题目太长不放

    递归处理

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cmath>
     4 #include<cstring>
     5 #include<algorithm>
     6 using namespace std;
     7 
     8 int a[30];    
     9 int dfs(int n)    
    10 {    
    11 //幂为0、1、2则直接输出,>=3则递归求解。     
    12     int i=0;    
    13     if(n!=0)    
    14     {      
    15         while(n>=a[i]) i++; i--; //找到最大的幂    
    16         n-=a[i];//下面12~20行是处理减去的这部分。     
    17         printf("2");     
    18         if(i!=1)printf("(");//注意1次幂是2而不是2(1)        
    19         if( i==0 || i == 2 ) printf("%d)",i);//幂为0、1、2时可输出幂(幂1时无输出)     
    20         //如果幂>=3,对幂递归,不输出幂。     
    21         if(i>=3) {dfs(i);printf(")");}//递归求解,再添加右括号。    
    22         if(n!=0) {printf("+");dfs(n);}//子问题与子问题之间用+连接;处理剩余的n(子问题)。    
    23     }    
    24     return 0;    
    25 }    
    26 int main(void)    
    27 {    
    28     int i,n;    
    29     a[0]=1;    
    30     for(i=1;i<50;i++)    
    31         a[i]=a[i-1]*2; //a:1 2 4 8 16 32……     
    32     scanf("%d",&n);    
    33     dfs(n);    
    34     return 0;     
    35 }  
    幂次方
  • 相关阅读:
    HDU 2116 Has the sum exceeded
    HDU 1233 还是畅通工程
    HDU 1234 开门人和关门人
    HDU 1283 最简单的计算机
    HDU 2552 三足鼎立
    HDU 1202 The calculation of GPA
    HDU 1248 寒冰王座
    HDU 1863 畅通工程
    HDU 1879 继续畅通工程
    颜色对话框CColorDialog,字体对话框CFontDialog使用实例
  • 原文地址:https://www.cnblogs.com/SilverNebula/p/5949869.html
Copyright © 2011-2022 走看看