续 洛谷:从零开始的步伐(1)https://blog.csdn.net/Deeplow/article/details/104413544
菜鸟继续上坡,哦不,还在起步
Part 1.
洛谷新手村-数组之前的题目(语言:C语言)
(二)顺序与分支
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 不高兴的津津
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 津津的储蓄计划
【代码】
#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 买铅笔
【代码】
#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 星期五