洛谷入门——分支结构(c++)

小小的总结,小小的分析了一下,如果对您有帮助,请动动你的小手给个赞吧!
如果有更好的解法可以在评论区留言哦!

1.数的性质

/*根据各自的条件来进行判断就行了*/ 
#include
using namespace std;
int main()
{
	int num;
	cin>>num;
	if(num%2==0&&(num>4&&num<=12))
		cout<<1<<" "<<1<<" "<<0<<" "<<0;
	else if(num%2!=0&&(num<=4||num>12))
		cout<<0<<" "<<0<<" "<<0<<" "<<1;
	else if((num%2!=0&&(num>4&&num<=12))||(num%2==0&&(num<=4||num>12)))//也可以不用这个条件,直接else就行了 
		cout<<0<<" "<<1<<" "<<1<<" "<<0;
	return 0;
 } 

2.判断闰年

/*根据闰年的判断直接输出就行*/ 
#include
using namespace std;
int main()
{
	int year;
	cin>>year;
	cout<<((year%400==0)||(year%4==0&&year%100!=0))?1:0;
	return 0;
} 

3.Apples

#include
using namespace std;
int main()
{
	int n;
	cin>>n;
	if(n<3)
		cout<<"Today, I ate "<<n<<" apple.";
	else
		cout<<"Today, I ate "<<n<<" apples.";
	return 0;
}

4.洛谷团队系统

/*这题有两种方法
  一种是去计算各自所需要的时间然后对比 
  另一种是经过计算,当题目小于6时,都是本地时间花得少,从6开始洛谷团队系统的用时少
  推荐第二种方法,少了计算的步骤*/ 
#include
using namespace std;
int main()
{
	int n;
	cin>>n;
	if(n<6)
		cout<<"Local";
	else 
		cout<<"Luogu";
	return 0;
}

5.肥胖问题

/*这题用判断语句按要求输出就可以了*/
#include
using namespace std;
int main()
{
	double BIMI,h,m;
	cin>>m>>h;
	BIMI=m/(h*h);
	if(BIMI<18.5)
		cout<<"Underweight";
	else if(BIMI>=24)
			cout<<BIMI<<endl<<"Overweight";
		else
			cout<<"Normal";
	return 0;
} 

6.三位数排序

/*我用的是sort函数来进行快速排序,运行时间是o(nlogn),是快速排序时间的一个期望值
sort(start,end,cmp)
start是开始的位置,end是结束元素的后一个位置,cmp是排序的方法,默认是升序
如果是要降序的话,第三个位置可以写成:greater(),或者自己定义一个返回两个数较大的那个数的函数也行*/

#include
using namespace std;
int num[3];
int main()
{
	cin>>num[0]>>num[1]>>num[2];
	sort(num,num+3);
	cout<<num[0]<<" "<<num[1]<<" "<<num[2];
	return 0;
}

7.月份天数

/*首先定义一个数组储存一年中每个月的天数,月数就是数组的下标
 其次判断是否是闰年,根据判断结果来改变二月的天数
 根据输入,输出对应的天数*/
 
#include
using namespace std;
int main()
{
	int year,month;
	int day[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
	cin>>year>>month;
	if(year%400==0||(year%4==0&&year%100!=0))
		day[2]=29;
	cout<<day[month];
    return 0;
} 

8.不高兴的津津

#include
using namespace std;
int main()
{
	int a,b,day=0,max=0,i;
	for(i=1;i<=7;i++)/*循环输入每天的上课时间,并进行判断*/ 
	{
		cin>>a>>b;
		if(a+b>max&&a+b>8)/*如果超过8小时,并且比原先的max大,则更新上课的最长时间max,以及当天的天数day*/ 
		{
			max=a+b;
			day=i;
		}
	}
	cout<<day;/*输出对应的时间*/ 
	return 0;
}

9.买铅笔

/*设置一个最小值,分别对每次输入的数据进行计算要花费多少钱
 如果这个花费比min小的话,就更新min的值
 最后输出min*/ 
#include
using namespace std;
int main()
{
	int need,cost,num_buy,num_one,price,min=99999999,i;/*此处的min定义不能小于一定的数,不然会有些测试点过不了*/ 
	cin>>need;
	for(i=0;i<3;i++)
	{
		cin>>num_one>>price;
		num_buy=(need%num_one==0)?need/num_one:need/num_one+1;/*计算所要购买几包*/ 
		cost=num_buy*price;
		if(cost<min)
			min=cost;
	}
	cout<<min;
	return 0;
 } 
/*在解答中看到一个比较简短的代码,用STL中的ceil函数,可以多去看看
#include
using namespace std; 
int n,a,b,c,ans=2100000000,x,i;
int main()
{
    scanf("%d",&n);
    for (;i<3;i++)
    {
        scanf("%d%d",&a,&b);
        x=ceil(n*1.0/a)*b;
        ans=min(x,ans);
    }
    printf("%d\n",ans);
    return 0;
} */

10.ISBN号码

/*本题的思路就是先输入这个字符串,然后对第一个数字开始到识别码倒数第二个数字进行求和,求模
算出正确的识别码,再跟字符串中的识别码进行校对,不对则更新识别码,最后输出字符串或者Right 
要注意字符与数字的转换,注意当识别码为10时要转换成X*/ 
#include
using namespace std;
int main()
{
	char a[14],n;
	int sum=0,j=1,i=0,code;
	cin>>a; 
	for(i=0;i<11;i++)
	{
		if(a[i]!='-')
		{
			sum+=j*(a[i]-'0');
			j++;
		}
	}
	code=sum%11;
	if(code==10)
		n='X';
	else 	
		n=code+'0';
	if(n==a[12])
		cout<<"Right";
	else 
	{
		a[12]=n;
		cout<<a;
	}
	return 0;
} 

11.小玉家的电费

/*这道题根据不同电位价格来进行不同的计算,简单的数学问题
最后只要注意保留一位小数就可以了*/ 
#include
using namespace std;
int main()
{
	int x;
    double cost;
	cin>>x;
	if(x<=150)
		cost=0.4463*x;
	else if(151<=x&&x<=400)
			cost=0.4463*150+0.4663*(x-150);
		else
			cost=0.4463*150+0.4663*250+0.5663*(x-400);
	cout<<fixed<<setprecision(1)<<cost;
	return 0;
} 

12.小鱼的航程(改进版)

/*这道题注意数据太大溢出的情况就行
尽量不用循环,循环的时间可能会比较久*/
#include
using namespace std;
int main()
{
	unsigned long long voyage;
	int x,n;
	cin>>x>>n;
	/*先计算出扣掉x那一周的航程,该航程包括两部分,一部分是/7,还有%7的航程*/ 
    voyage=(n-(8-x))/7*1250; 
    if((n-(8-x))%7==6)	
    	voyage+=1250;
    else if((n-(8-x))%7<6)	
    	voyage+=(n-(8-x))%7*250;
    /*再加上x那一周的航程就是总航程啦*/ 
    if(x<=5)
    	voyage+=(6-x)*250;
	cout<<voyage;
	return 0;
 } 

13.三角函数

/*这题我的思路是将三个勾股数存入数组,然后对这三个数进行排序
再使用gcd函数对分子分母进行约分,使用gcd时要记得加上__不然系统会报错
最下面是gcd查找最大公约数的一个过程,比较简单,容易理解*/ 
#include
using namespace std;
int main()
{
	int a[3],i;
	for(i=0;i<3;i++)
		cin>>a[i];
	sort(a,a+3);
    cout<<a[0]/__gcd(a[0],a[2])<<"/"<<a[2]/__gcd(a[0],a[2]);
    return 0;
}
/*
long long gcd(long long,long long)
{
	while(a!=b)
		if(a>b)
			a-=b;
		else	
			b-=a;
	return a;
}
*/

14.陶陶摘苹果

/*这道题挺简单的,只要用一个数组将10个苹果的高度储存一下,
用一个变量存储陶陶能够得着的高度,记得加上凳子的高度,
然后再逐一进行比较累加就行*/ 
#include
using namespace std;
int main()
{
	int a[10],i,sum=0,h;
	for(i=0;i<10;i++)
		cin>>a[i];
	cin>>h;
	h+=30;
	for(i=0;i<10;i++)
		if(a[i]<=h)
			sum++;
	cout<<sum;
	return 0;
}

15.三角形分类

/*根据三角形各自的条件进行判断即可,注意换行就行*/ 
#include
using namespace std;
int main()
{
	int d[3],i;
	for(i=0;i<3;i++)
		cin>>d[i];
	sort(d,d+3);
	if(d[0]+d[1]<d[2])
	{
		cout<<"Not triangle";
		return 0;
	}
	if(d[0]*d[0]+d[1]*d[1]==d[2]*d[2])
		cout<<"Right triangle"<<endl;
	else if(d[0]*d[0]+d[1]*d[1]>d[2]*d[2])
			cout<<"Acute triangle"<<endl;
		else
			cout<<"Obtuse triangle"<<endl;
	if(d[0]==d[1]||d[1]==d[2])
		cout<<"Isosceles triangle"<<endl;
	if(d[0]+d[1]==d[2]*2)
		cout<<"Equilateral triangle"<<endl;
	return 0;
} 

16.ABC

/*对三个数字用sort进行排序,然后再存储输入的三个字母顺序
进行判断字符数组的字母,输出对应数字数组中的数字就行了*/ 
#include
using namespace std;
int main()
{
	int i,num[3];
	char str[3];
    for(i=0;i<3;i++)
    	cin>>num[i];
    sort(num,num+3);
    for(i=0;i<3;i++)
    	cin>>str[i];
    for(i=0;i<3;i++)
    {
    	if(str[i]=='A')
    		cout<<num[0]<<" ";
    	else if(str[i]=='B')
    		cout<<num[1]<<" ";
    		else 
    			cout<<num[2]<<" ";
	}
	return 0;
 } 

你可能感兴趣的:(洛谷入门——分支结构(c++))