#今天刷题遇到的问题
- return 0;意思是结束该程序(买房问题)
#include<stdio.h>
int main(){
double n,k,sum=0,s=200;
scanf("%lf %lf",&n,&k);
for(int i=1;i<=20;++i){
sum+=n;
if(sum>=s){printf("%d",i);}
s*=(1+k*0.01);
}
printf("Impossible");
}//(没有return 0;会每次都输出Impossible)
#include<stdio.h>
int main(){
double n,k,sum=0,s=200;
scanf("%lf %lf",&n,&k);
for(int i=1;i<=20;++i){
sum+=n;
if(sum>=s){
printf("%d",i);
return 0;
}
s*=(1+k*0.01);
}
printf("Impossible");
return 0;
}//(在输出i之后,遇到了return 0;直接结束程序)
- 取整
- 舍去小数部分:i=(int)a;
- 向下取整:floor(2.5)=2;
- 向上取整:ceil(2.5)=3;
- scanf函数里面的&不要忘了
- 除法
- 注意int/int会自动取整
- 虽然要求输入的类型为int,但是后来变成了double,一定在初始时就要定义成double。
- 如果是给定的两个数,可以用eg.2*1.0/3。
- 题目要求
- 注意读入的顺序
- 注意运算的顺序
- 没有scanf的变量,初始成0或1。
- 尽量把除法换成乘法。
- 注意求模和除法。
- 善用反向的思维。
eg.虫子与苹果
#include<stdio.h>
int main(){
double n,x,y;
int a;
scanf("%lf %lf %lf",&n,&x,&y);
n=n-y/x;//避免了讨论y/x是否等于(double)y/x
a=n;//取整
printf("%d",a);
}
- 可以边输入边输出,不一定要用组数
#include<stdio.h>//求和与均值
int main(){
int n,a;
long sum=0;
scanf("%d",&n);
for(int i=0;i<n;++i){
scanf("%d",&a);//舍弃了先读入组数再计算的方法
sum+=a;
}
printf("%ld %.5lf",sum,(double)sum/n);
}
- sizeof(int)或sizeof(“Hello, World!”)可以用%zd,%u,%lu匹配其输出值。
- for里面的数据类型一定要定义!!!!!
- 四舍五入:采用±0.5的方法
#include<stdio.h>
int main(){
(int)(1.6+0.5)
}
- 保留小数点后几位
- %.2lf
float a=3.456;//保留两位 float b=(int)((a*100)+0.5)/100.0;
- 暂时记到这,吃饭。