作业题解
大象喝水
题目描述
一只大象口渴了,要喝20升水才能解渴,但现在只有一个深h厘米,底面半径为r厘米的小圆桶(h和r都是整数)。问大象至少要喝多少桶水才会解渴。
输入
输入有一行:包行两个整数,以一个空格分开,分别表示小圆桶的深h和底面半径r,单位都是厘米。
输出
输出一行,包含一个整数,表示大象至少要喝水的桶数。
输出数据 1
3
思路:
大象要喝20升水,我们有一种水桶,我们知道水桶的底面半径和水桶的高,那么我们就可以求出水桶的容积(或者体积)。圆柱的容积公式 V = ∏ * r * r * h。
我们知道常量Π = 3.1415926 应为他是一个浮点数,我们将其用double(或者float)变量存储。
double v = 3.1415926 * r * r * h;
然后我们是不是可以求几桶水才能达到20升了。这里面有一个小细节,当我们求出的桶数不是一个整数的时候,那么我们需要的数量就是向上取整了。也就是说我们求出是 比如是2.3,那我们需要的桶数就是3通。
先看下求桶数代码:
double t1 = 20000 / v;
为什么是20000呢?注意看题,题目说的桶的单位是厘米。知道了吧。那接下来的任务就是如何判断他是不是一个整数了。我给出我的判断方法:
double t1 = 20000 / v;
int t2 = (int)t1;
double t3 = (double)t2;
if (t1 == t3)
printf("%d", t2);
else
printf("%d", t2 + 1);
这里面用到是数据类型的强制转换,不知道没有关系,点这里了解一下C语言数据类型强制转换
下面给出AC代码
1 #include <stdio.h> 2 3 int main() 4 { 5 int h, r; 6 scanf("%d %d", &h, &r); 7 double v = 3.1415926 * r * r * h; 8 double t1 = 20000 / v; 9 int t2 = (int)t1; 10 double t3 = (double)t2; 11 if (t1 == t3) 12 printf("%d", t2); 13 else 14 printf("%d", t2 + 1); 15 return 0; 16 }
这是用到数组的AC代码:
1 #include<stdio.h> 2 3 int f[10010]; 4 int main() 5 { 6 int n; 7 scanf("%d",&n); 8 9 for(int i = 0; i < n; i ++) 10 { 11 scanf("%d", &f[i]); 12 } 13 14 int sum = 0; 15 for(int i = 0; i < n; i ++) 16 { 17 sum += f[i]; 18 } 19 20 double v; 21 v = sum * 1.0 / n; 22 23 printf("%d %.5f", sum, v); 24 25 return 0; 26 }
判断闰年
题目描述
判断某年是否是闰年。如果公元a年是闰年输出Y,否则输出N。
输入
输入只有一行,包含一个整数a。
输出
一行,如果公元a年是闰年输出Y,否则输出N。
输出数据 1
N
思路:
首先我们要知道什么是闰年。闰年的定义就是
- 年份是400的整数倍
- 年份是4的倍数,但不是100的整数倍
现在是不是知道了,我们直接看AC代码:
1 #include<stdio.h> 2 3 int main() 4 { 5 int a; 6 scanf("%d", &a); 7 if(!(a % 400) || (!(a % 4) && a % 100)) printf("Y"); 8 else printf("N"); 9 10 return 0; 11 }
最大数输出
题目描述
输入三个整数,数与数之间以一个空格分开。 输出一个整数,即最大的整数。
输入
输入为一行,包含三个整数,数与数之间以一个空格分开。
输出
输出一行,包含一个整数,即最大的整数。
输出数据 1
56
思路:
控制台输入3个数,输出其中最大的一个数。这是不是要用到我们的判断语句了。
我们这样:定义一个新的变量t,我们先将a, b进行比较,将较大的赋值给t:
1 int t; 2 if(a > b) t = a; 3 else t = b;
然后将t与c进行比较:
1 f(t < c) t = c;
这样是不是可以找到最大值了,
下面看完整AC代码:
1 #include<stdio.h> 2 3 int main() 4 { 5 int a, b, c; 6 scanf("%d%d%d", &a, &b, &c); 7 int t; 8 if(a > b) t = a; 9 else t = b; 10 11 if(t < c) t = c; 12 printf("%d", t); 13 return 0; 14 }
字符菱形
题目描述
给定一个字符,用它构造一个对角线长 5 个字符,倾斜放置的菱形。
输入格式
只有一行,一个字符
输出格式
按规则输出菱形
提示
不一定要使用 for 循环哦
思路:
输入一个字符,然后我们以这个字符输出一个图形。有什么需要想的吗?没有。我们就输入一个数据,然后printf();注意格式就行了。
我们看下代码:
1 #include<stdio.h> 2 3 int main() 4 { 5 char a; 6 scanf("%c", &a); 7 printf(" %c \n", a); 8 printf(" %c%c%c \n", a, a, a); 9 printf("%c%c%c%c%c\n", a, a, a, a, a); 10 printf(" %c%c%c \n", a, a, a); 11 printf(" %c \n", a); 12 return 0; 13 }
输出第二个整数
题目描述
输入三个整数,整数之间由一个空格分隔,整数是32位有符号整数。把第二个输入的整数输出。
输入格式
只有一行,共三个整数,整数之间由一个空格分隔。整数是32位有符号整数。
输出格式
只有一行,一个整数,即输入的第二个整数。
输出数据 1
456
思路:
输入3个数,输出第二个输入的数。 对,就这意思。
AC代码:
1 #include<stdio.h> 2 3 int main() 4 { 5 int a, b, c; 6 scanf("%d%d%d", &a, &b, &c); 7 printf("%d", b); 8 9 return 0; 10 }
求整数的和与均值
题目描述
读入n(1≤n≤10000)个整数,求它们的和与均值。
输入
输入第一行是一个整数n,表示有n个整数。
第2~n+1行每行包含1个整数。每个整数的绝对值均不超过10000。
输出
输出一行,先输出和,再输出平均值(保留到小数点后5位),两个数间用单个空格分隔。
输出数据 1
1131 282.75
思路:
我们输入n, 然后再输入n个数,求出他们的和与平均值。这里就需要我们讲的循环了。还记得for循环的格式吗?
1 for(初始化 ;运行条件 ;变化 ){ 2 执行语句 3 }
我们定义一个ans对他们进行求和可以把?看下可以看的懂吗?
1 int ans = 0; 2 for (int i = 1; i <= n; i++) 3 { 4 int x; 5 scanf("%d", &x); 6 ans += x; 7 }
然后就是输出了,他们的和不就是ans嘛。那平均值呢?看题,他们要的是保留5位小数,那不就是浮点数吗?我们再定义一个double(或者float)型的变量存储起来,然后再输出。这里也有类型转化,在上面有个链接,你不会点进去看看就可以了。
1 double v; 2 v = ans * 1.0 / n;
那剩下的就是输出了:
下面是AC代码
1 #include <stdio.h> 2 int f[10010]; 3 int main() 4 { 5 int n; 6 scanf("%d", &n); 7 int ans = 0; 8 for (int i = 1; i <= n; i++) 9 { 10 int x; 11 scanf("%d", &x); 12 ans += x; 13 } 14 double v; 15 v = ans * 1.0 / n; 16 printf("%d %.5f", ans, v); 17 return 0; 18 }

浙公网安备 33010602011771号