洛谷:第二步和第一步的区别是没有区别(2)

续 洛谷:从零开始的步伐(1)https://blog.csdn.net/Deeplow/article/details/104413544

菜鸟继续上坡,哦不,还在起步

Part 1.
洛谷新手村-数组之前的题目(语言:C语言)

(二)顺序与分支

顺序与分支,第二步和第一步的区别是没有区别

P1422 小玉家的电费

P1422 小玉家的电费
【代码】

#include<stdio.h>

int main ()
{
	double n,m = 0;
	scanf("%lf", &n );
	if  ( n <= 150 )
	{
		printf("%.1f\n", m = 0.4463*n);
	}else if( n > 150 && n <= 400)
	{
		printf("%.1f\n", m = 0.4463*150 + 0.4663*(n-150));
	}else
	{
		printf("%.1f\n",m = 0.4463*150 + 0.4663*250 + 0.5663*(n-400));
	}
	return 0;
}

【分析】很简单,运用分段函数的关系,级联的if语句懂就行。
%.2f表示对浮点型的数取两位小数的格式符。
其他解法可能用到了C语言的强制类型转换来达到取小数的目的,可以参考洛谷的题解。

P1085 不高兴的津津

P1085 不高兴的津津
ps:这一题是我用洛谷遇到的第一个坎,虽说也是技艺不精……上代码
【代码】

#include<stdio.h>
int main ()
{
	int nor , spe;
	//nor(normal)代表正常上学的时间,spe(special)表示兴趣班的时间
	int sum , max=0;
	//sum记录总时间,max用来存放总时间最大的值 (记得初始化) 
	int un_day = 0;
	//un_day记录津津最不高兴的一天的星期数 
	for ( int i = 1 ; i <= 7 ;i++){
		scanf("%d%d",&nor,&spe);
		sum = nor + spe ;
		if ( sum > 8 && sum > max){
		// 牢记你输入是步骤,要用机器的思维考虑问题 
		      max = sum;
              un_day = i; 
		//凡是sum大于8,而且比前一天的大,才能进入if执行语句 
		}
	}
	printf("%d", un_day ); 	
	return 0; 
} 

【分析】主要练习的是代码的步骤感

for ( int i = 1 ; i <= 7 ;i++){
		scanf("%d%d",&nor,&spe);
		sum = nor + spe ;
		if ( sum > 8 && sum > max){
		// 牢记你输入是步骤,要用机器的思维考虑问题 
		      max = sum;
              un_day = i; 
		//凡是sum大于8,而且比前一天的大,才能进入if执行语句 
		}
	}

在for循环中可以规定循环体的执行次数,做到“全”;
在循环体内设置if,规定判断条件可以不让不符合条件的值影响到参数;
以上这两句话规定了循环体中那些在if语句之外,那些在if语句之内。
不熟的话多调试几次,监控一下变量,之后写代码就会有提纲挈领的感觉。
其他方法暂不陈列,一步一步来。

P1089 津津的储蓄计划

P1089 津津的储蓄计划
【代码】

#include <stdio.h>
int main ()
{
	    int i, bud=0 , rest = 0;//i是循环控制,bud(budget)预算,rest余额
		int k=0;
		int sum_k = 0;//记录k的总和的变量
		//变量的定义最好不要放在循环体中,不然初始化很有可能闹出麻烦
	for (i=1;i<=12;i++){
	//当然要“全”
		scanf("%d", &bud);
		rest = rest + 300 - bud;//rest要实时更新
		if ( rest < 0)//没钱了吃土了
		{
			i=-i;
			break;//break是为了立马输出月份的负数,防止i负负得正
		}else//还有钱,太多了还要上交
		{
		    k= rest/100*100;//k就是要上交的钱
			rest = rest - k;//余额少啦
			sum_k=sum_k+k;//记录上交的钱的总和
		}
    }
    if (i <= 0 )//如果经历break,直接到这;或者for循环完全结束
    {
    	printf("%d", i);//看看你哪一个月吃土
    }else
    {
    	printf ("%d", rest+sum_k*12/10);
    	//算出一年最后手中的钱,哈哈,真有成就感
    	//k*12/10为什么不直接用k*1.2呢?因为k是整数型变量,进行整数运算保稳
    }
    return 0;
}

ps:说实话,第一次写这么长(关键是有用)的代码非常有成就感。
【分析】
1、记录for循环中一个变化变量的总和,需要定义一个新变量,然后用

int a=0;
a=a+b;

就可以用a来记录b的总和(一次循环加一次);
2、定义变量同时初始化时,不要再循环体当中初始化,否则有坑:每次进入循环那个变量就归零了,很烦人,如:

  else{
    int k=0;
    int sum_k = 0;//记录k的总和的变量
    k= rest/100*100;//k就是要上交的钱
	rest = rest - k;//余额少啦
    sum_k=sum_k+k;//记录上交的钱的总和
    }

这样就不妙了。
其他解法暂不陈列。

P1909 买铅笔

P1909 买铅笔
【代码】

#include <stdio.h>
int main ()
{
	int n;
	scanf("%d",&n);
	int min[3];
	int i;
	for ( i=0; i<3; i++){
		int a,b;
		
	    scanf("%d%d",&a,&b);	
		int X=n/a;
		if(n % a != 0)
	    {
		X++;
	    }
	    X=X*b;
	    min[i]=X;
	}
	
	int Min;
	if(min[1]<min[0])
	{
	   Min=min[1];
	}else 
	{ 
	   Min=min[0];
	}
	if(Min>min[2])
	{ 
	   printf("%d",min[2]);
	}else
	{
	   printf("%d",Min);
	}
    return 0;
}

【分析】这个代码其实就是分为两个部分:
1、求出数组 [i](i=0,1,2) 的值;
2、求出其中的最小值。
暂列于此
2020/2/21 1:05 星期五

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值