• [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 }  
    幂次方
  • 相关阅读:
    django 模型ManyToMany 关联的添加,删除,查询
    js 购物车的数量加减,对应的总价也随机变化
    `Java`中`abstract class`与`interface`区别
    基于Netty的IdleStateHandler实现Mqtt心跳
    由MQTT topic的正则表达式匹配引发的特殊字符"/"匹配思考
    Maven项目配置Logback输出JSON格式日志
    MySql定时备份脚本
    使用tcpdump监控http流量
    Linux磁盘信息查询及删除文件操作
    基于Morphia实现MongoDB按小时、按天聚合操作
  • 原文地址:https://www.cnblogs.com/SilverNebula/p/5949869.html
Copyright © 2020-2023  润新知