c++-----类和对象的特性

锻炼脑思维,谨防死机

part 1:洛谷第一个任务**

题目介绍:小鱼的游泳时间

伦敦奥运会要到了,小鱼在拼命练习游泳准备参加游泳比赛,可怜的小鱼并不知道鱼类是不能参加人类的奥运会的。

这一天,小鱼给自己的游泳时间做了精确的计时(本题中的计时都按24小时制计算),它发现自己从a时b分一直游泳到当天的c时d分,请你帮小鱼计算一下,它这天一共游了多少时间呢?

小鱼游的好辛苦呀,你可不要算错了哦。

输入输出格式

输入格式:
一行内输入 4 个整数,分别表示 a, b, c, d。

输出格式:
一行内输出 2 个整数 e 和 f,用空格间隔,依次表示小鱼这天一共游了多少小时多少分钟。其中表示分钟的整数 f 应该小于60。

输入格式:
12 50 19 10
输出格式:
6 20

解题思路
小鱼的游泳时间:
1.选择00:00作为标准,将时间全部化成分钟数,在将相应的时间换成相应的小时和分钟,按照相应的格式输出。
2.进行相应的条件判断,当第二个时间的分钟数大于第一个时,第二个分钟数小于第一个时间时,将相应的小时数减一,分钟数加60进行计算,注意进制的转化就ok

源代码

#include<stdio.h>
int main(){
int a,b,c,d,e,f;
scanf("%d%d%d%d",&a,&b,&c,&d);
int sum1=a*60+b;
int sum2=c*60+d;
int sum3=sum2-sum1;
 e=sum3/60;
 f=sum3-e*60;
 printf("%d %d\n",e,f);
 return 0;
}

part 2 :顺序与分支

01 题目介绍:小玉家的电费
夏天到了,各家各户的用电量都增加了许多,相应的电费也交的更多了。小玉家今天收到了一份电费通知单。小玉看到上面写:据闽价电[2006]27号规定,月用电量在150千瓦时及以下部分按每千瓦时0.4463元执行,月用电量在151~400千瓦时的部分按每千瓦时0.4663元执行,月用电量在401千瓦时及以上部分按每千瓦时0.5663元执行;小玉想自己验证一下,电费通知单上应交电费的数目到底是否正确呢。请编写一个程序,已知用电总计,根据电价规定,计算出应交的电费应该是多少。

输入输出格式

输入格式:
输入一个整数,表示用电总计(单位以千瓦时计),不超过10000。

输出格式:
输出一个数,保留到小数点后1位(单位以元计,保留到小数点后1位)。

输入格式:267
输出格式:121.5

解题思路
小玉家的电费:
注意浮点的范围,直接将其改为double,当要采用四舍五入的时候,可以将(数字*10+0.50)/10,既可以完成四舍五入
源代码

#include<stdio.h>
int main(){
	int a=0;
   double b=0;
	scanf("%d",&a);
	if(a<=150){
		b=0.4463*a; 
	}
	else if(a>=151&&a<=400){
	b=150*0.4463+(a-150)*0.4663; 
	}
	else{
		b=150*0.4463+250*0.4663+(a-400)*0.5663; 
	} 
	b=int(b*10+0.5)/10.0;
    printf("%.1f\n",b);
	return 0;	
} 

02 题目介绍:不高兴的津津

津津上初中了。妈妈认为津津应该更加用功学习,所以津津除了上学之外,还要参加妈妈为她报名的各科复习班。另外每周妈妈还会送她去学习朗诵、舞蹈和钢琴。但是津津如果一天上课超过八个小时就会不高兴,而且上得越久就会越不高兴。假设津津不会因为其它事不高兴,并且她的不高兴不会持续到第二天。请你帮忙检查一下津津下周的日程安排,看看下周她会不会不高兴;如果会的话,哪天最不高兴。

输入输出格式

输入格式:
输入包括77行数据,分别表示周一到周日的日程安排。每行包括两个小于1010的非负整数,用空格隔开,分别表示津津在学校上课的时间和妈妈安排她上课的时间。

输出格式:
一个数字。如果不会不高兴则输出00,如果会则输出最不高兴的是周几(用1, 2, 3, 4, 5, 6, 71,2,3,4,5,6,7分别表示周一,周二,周三,周四,周五,周六,周日)。如果有两天或两天以上不高兴的程度相当,则输出时间最靠前的一天。

输入格式:
5 3
6 2
7 2
5 3
5 4
0 4
0 6

输出格式:
3

解题思路

不高兴的津津:注意将每个月的剩余计算清楚,逻辑一定要清楚

源代码

#include<iostream>
using namespace std;
int main(){
int a[13]={0},b[13]={0},i=0,flag=1,sum=0;

  for(i=1;i<13;i++){
    cin>>a[i];
  }
  
   int lea=300-a[1];
  for(i=2;i<13;i++){
	b[i]=300+lea;
   	if(b[i]<a[i])
    {
	  cout<<"-"<<i<<endl;
	  flag=0;
	  break;
    }
    else
     lea=b[i]-a[i];  
    int j=lea/100;
	   if(j!=0)
	     {
		 lea=lea-j*100; 
		 sum+=j*100;	
		 }
}

03 题目介绍:津津的存储计划
津津的零花钱一直都是自己管理。每个月的月初妈妈给津津300300元钱,津津会预算这个月的花销,并且总能做到实际花销和预算的相同。

为了让津津学习如何储蓄,妈妈提出,津津可以随时把整百的钱存在她那里,到了年末她会加上20%20%还给津津。因此津津制定了一个储蓄计划:每个月的月初,在得到妈妈给的零花钱后,如果她预计到这个月的月末手中还会有多于100100元或恰好100100元,她就会把整百的钱存在妈妈那里,剩余的钱留在自己手中。

例如1111月初津津手中还有8383元,妈妈给了津津300300元。津津预计1111月的花销是180180元,那么她就会在妈妈那里存200200元,自己留下183183元。到了1111月月末,津津手中会剩下33元钱。

津津发现这个储蓄计划的主要风险是,存在妈妈那里的钱在年末之前不能取出。有可能在某个月的月初,津津手中的钱加上这个月妈妈给的钱,不够这个月的原定预算。如果出现这种情况,津津将不得不在这个月省吃俭用,压缩预算。

现在请你根据2004年1月到12月每个月津津的预算,判断会不会出现这种情况。如果不会,计算到2004年年末,妈妈将津津平常存的钱加上20%还给津津之后,津津手中会有多少钱。

输入输出格式

输入格式:
1212行数据,每行包含一个小于350350的非负整数,分别表示11月到1212月津津的预算。

输出格式:
一个整数。如果储蓄计划实施过程中出现某个月钱不够用的情况,输出-X−X,XX表示出现这种情况的第一个月;否则输出到20042004年年末津津手中会有多少钱。

注意,洛谷不需要进行文件输入输出,而是标准输入输出。

输入格式:
290
230
280
200
300
170
340
50 
90 
80 
200
60 

输出格式:
-7 
输入格式:
290 
230 
280 
200 
300 
170 
330 
50 
90 
80 
200 
60 

输出格式:
1580

解题思路

思路:将每个笔的数量以及包装作为相应数组的值,在计算相应需要的数量,对于小数的产生,可以采用先取地板函数(floor)在加1,或者将最后结果取ceil函数。
源代码

#include<iostream>
#include<math.h>
using namespace std;
int main()
{
	int a,b[4],c[4],d[4];
	cin>>a;
int num=0;
for(int i=0;i<3;i++)
{
	 cin>>b[i]>>c[i];
	 if(a%b[i])
	  num=( floor(a/b[i]))+1;
	  else
	  num=a/b[i];
	   d[i]=num*c[i];
	}
	
	int min=d[0];
	for(int i=1;i<3;i++)
	{if(d[i]<min)
	  min=d[i];
	}
	cout<<min<<endl;
return 0;
}

part 3:循环

01题目介绍:津津的存储计划
题目背景

本题为提交答案题,您可以写程序或手算在本机上算出答案后,直接提交答案文本,也可提交答案生成程序。

题目描述

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

输入输出格式

输入格式:
木有输入

输出格式:
若干行,每行33个数字。按照每行第11个数字升序排列。

输入格式:
无
输出格式:
192 384 576
* * *
...

* * *
(输出被和谐了)

解题思路1
思路1:使用三重循环,作为构成a的百位,十位,个位,将2a,3a作为,b,c再调用专门的返回该整数含有数字的个数的函数,函数思路:根据需要,设置全局变量d[9],数组里面的每一个数字代表下表数字出现的次数,调用完毕之后,在主函数里面将数组的值全部清零。
该函数为:
int gw;
int d[9];
int cf(int x){
while(x!=0){
gw=x%10;
x=(x-gw)/10;
d[gw]++;
}
}
源代码

#include<iostream>
using namespace std;
int gw; 
int d[9];
int cf(int x){
    while(x!=0){        
        gw=x%10;
        x=(x-gw)/10; 
        d[gw]++;
}
}
int main(){
    int a,b,c;
    for (int i=1;i<=9;i++)
        for (int j=1;j<=9;j++)
            for (int k=1;k<=9;k++){
                a=i*100+j*10+k;
                b=a*2;
                c=a*3;
                cf(a);
                cf(b);
                cf(c);
                if(d[1]==1&&d[2]==1&&d[3]==1&&d[4]==1&&d[5]==1&&d[6]==1&&d[7]==1&&d[8]==1&&d[9]==1){
                    cout<<a<<" "<<b<<" "<<c<<endl;
                }
                for (int e=1;e<=9;e++){
                    d[e]=0;
                }
            }
            return 0;
        }

解题思路2
使用全排列,包含相应的头文件#include
调用算法库里面的函数,将数字1~9全部混合,每一遍混合都组成新的a,b,c,进行条件判断是否满足比例关系。
源代码

#include <iostream>
#include <algorithm> 
using namespace std;

int main()
{
	int a,b,c,arr[9]={1,2,3,4,5,6,7,8,9};
	do{
		
		a=arr[0]*100+arr[1]*10+arr[2];
		b=arr[3]*100+arr[4]*10+arr[5];
		c=arr[6]*100+arr[7]*10+arr[8];
		if((b==a*2)&&(c==a*3))
		cout<<a<<" "<<b<<" "<<c<<endl;
	}while(next_permutation(arr,arr+9));

	
	return 0;
}

02题目介绍:计数问题
题目描述

试计算在区间 11 到 n n的所有整数中,数字 x(0 ≤ x ≤ 9)x(0≤x≤9)共出现了多少次?例如,在 11到 11 11中,即在 1,2,3,4,5,6,7,8,9,10,111,2,3,4,5,6,7,8,9,10,11 中,数字 11 出现了 44 次。

输入输出格式

输入格式:
22个整数n,xn,x,之间用一个空格隔开。

输出格式:
11个整数,表示xx出现的次数。

输入格式:
11 1
输出格式:
4

解题思路

思路:使用枚举的方法,在循环里面调用返回数字次数的函数,在通过条件判断,当与数组的下标相等时,返回该下表记录的值,即为该数字出现的次数。
源代码

#include<iostream>
#define maxn 1000000
using namespace std;
int gw; 
int d[10];
int cf(int x){
    while(x!=0){        
        gw=x%10;
        x=(x-gw)/10; 
        d[gw]++;
}
}

int main(){
int n,b;
cin>>n>>b;
for(int i=1;i<=n;i++){
	cf(i);	
}
cout<<d[b]<<endl; 
for (int e=0;e<=9;e++){
       d[e]=0;
   }
 return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值