分类
Level3

一级复习重点

一级要能够利用程序解决比较简单的问题:

语法要掌握输入输出(如小数)、基本数据类型(如int/double/char/bool)、变量定义和使用、选择结构、数学运算(如模运算)、关系运算和逻辑运算、循环、简单的嵌套循环的使用。

简单的算法技巧要掌握打擂台求最值利用模运算拆数、重新合并数字、简单的穷举(枚举)、试除法

特别注意:全局变量和局部变量的初始化特点不同。

输出a÷b×c的值  

依次输入数字a、b、c,数字之间以空格分隔。将计算结果保留6位小数输出。

#include<iostream>
#include<iomanip>  //函数库名字,必须记住
using namespace std;
int main(){
    double a,b,c; //结果是小数,可将变量也定义为double类型
    cin>>a>>b>>c;
    cout<<setprecision(6)<<fixed<<a/b*c<<endl; //保留小数,必须记住
}

字符判断

输入一个字符,如果该字符是大、小写字母或者数字,输出YES, 否则输出NO。

#include<iostream>
using namespace std;
int main(){
    char n;  //输入一个字符,变量定义时,注意数据类型要准确
    cin>>n;
    //字符比较,与&&  或|| 的使用,与的优先级更高,可省略与的括号
    if((n>='A'&& n<='Z') || (n>='a'&&n<='z') || (n>='0'&&n<='9')){
        cout<<"YES"<<endl;
    }else{
        cout<<"NO"<<endl;
    }
    return 0;
}

统计数的个数 

给定一个数字的序列S,以及一个区间【L, R】,求序列中介于该区间的数的个数,即序列中大于等于L且小于等于R的数的个数。

#include<iostream>
using namespace std;
int main(){
    int n,L,R,tot=0;   //tot是计数变量,初始化为0
    cin>>n>>L>>R;
    for(int i=1;i<=n;i++){   //循环输入x,对每个x进行判断
        int x;
        cin>>x;
        if(x>=L&&x<=R){  //对于区间[L, R]之间的数字,进行计数
            tot++;
        }
    }
    cout<<tot<<endl;
    return 0;
}

数1的个数    

给定一个十进制正整数n(1≤n≤10000),写下从1到n的所有整数,然后数一下其中出现的数字“1”的个数。 例如当n=2时,写下1,2。这样只出现了1个“1”;当n=12时,写下1,2,3,4,5,6,7,8,9,10,11,12。这样出现了5个“1”。

#include<iostream>
using namespace std;
int main (){
    int n,t=0;
    cin>>n;
    for(int i=1;i<=n;i++){  //看每个i里面有几个1,累加 
        int x=i; //不能直接去 处理i  ,用x
        while(x>0){  //这一段代码,循环处理x的每一位  
            if(x%10==1) t++;  //处理个位 
            x/=10;   //去掉个位 
        } 
    }
    cout<<t<<endl;
    return 0;
} 

苹果和虫子

你买了一箱n个苹果,很不幸的是买完时箱子里混进了一条虫子。虫子每x小时能吃掉一个苹果,假设虫子在吃完一个苹果之前不会吃另一个,那么经过y小时你还有多少个完整的苹果?

解法一:

#include<iostream>
using namespace std;
int n,x,y,c; //c表示已经吃了多少个 
int main(){
    cin>>n>>x>>y;
    if(y%x==0) c=y/x;   //正好吃了整数个
    else c=y/x+1; //如果不是吃整数个,那么就多算1个(被虫子啃烂了)
     
    if(c>n){ //吃掉的 比 总数n 还多,结果不能为负数,就输出0
        cout<<0; 
    }else{ //否则,剩下的苹果数量是n-c 
        cout<<n-c;
    }
    return 0;
}

解法二:

#include <iostream>
#include <cmath>   //数学函数
using namespace std;
int main (){
    int n,x,y;
    cin>>n>>x>>y;
    int eat=ceil(y*1.0/x);   //ceil向上取整
    if(n-eat<0){    //考虑吃光了的特殊情况
        cout<<0<<endl;
    }else{
        cout<<n-eat<<endl;
    }
    return 0;
}

最大质因子

质因子是指能整除给定正整数的质数。而最大质因子是指一个整数的所有质数因子中最大的那个。
比如30的质数因子有2、3、5,所有它的最大质因子是5。
比如17的质数因子只有17,所以它的最大质因子是17。

#include<iostream>
using namespace std;
int main(){
    int n;
    cin>>n;
    for(int i=n;i>=2;i--){   //数字从大往小去判断
        if(n%i==0){   //余数为0,则i是因子
            int tot=0;   //针对每个i,计数变量tot都要初始化为0
            for(int j=1;j<=i;j++){  //判断i有多少个因子
                if(i%j==0){
                    tot++;
                }
            }
            if(tot==2){   //如果i恰好有两个因子,则i是最大质因子
                cout<<i;
                return 0;   //得到结果,则结束程序
            }
        }   
    }
    return 0;   
}

解法二:将判断质数的逻辑抽象成函数

#include<iostream>
using namespace std;
int n;
bool f(int x){//判断x是否是质数,是返回true,否返回false
    for(int i=2;i<=x-1;i++){
        if(x%i==0){
            return false;
        }
    }
    return true;
}
int main(){
    cin>>n;
    for(int i=n;i>=2;i--){ //从大到小枚举,从n开始
        if(f(i) && n%i==0){ //是质数,且是因子
            cout<<i;
            return 0;
        }
    }
    return 0;
}