题单2—题解
P5710 数的性质
题目描述
一些数字可能拥有以下的性质: 性质 1:是偶数; 性质 2:大于 4 且不大于 12。 小A 喜欢这两个性质同时成立的数字;Uim 喜欢这至少符合其中一种性质的数字;八尾勇喜欢刚好有符合其中一个性质的数字;正妹喜欢不符合这两个性质的数字。
输入格式
输入一个数字
x
(
0
<
=
x
<
=
1000
)
x(0<=x<=1000)
x(0<=x<=1000)
输出格式
输出这 4 个人是否喜欢这个数字,如果喜欢则输出1 ,否则输出0 ,用空格分隔。
输入输出样例
输入
12
输出
1 1 0 0
题目思路
设变量
f
l
a
g
flag
flag,表示满足两种性质的个数,如果只满足性质1或者性质2,
f
l
a
g
=
1
flag=1
flag=1,如果满足性质1和性质2,
f
l
a
g
=
2
flag=2
flag=2,如果都不满足,
f
l
a
g
=
0
flag=0
flag=0。 设四个人分别要满足的条件为
a
,
b
,
c
,
d
a,b,c,d
a,b,c,d,值为0时不满足条件,值为1时满足条件。
现在判断四种条件对应的
f
l
a
g
flag
flag值:
条件
a
a
a:满足两种性质,
f
l
a
g
=
2
flag=2
flag=2 时,
a
=
1
a=1
a=1 条件
b
b
b:满足至少一种,
f
l
a
g
?
1
flag\geqslant 1
flag?1 时,
b
=
1
b=1
b=1 条件
c
c
c:只满足一种,
f
l
a
g
=
1
flag=1
flag=1时,
c
=
1
c=1
c=1 条件
d
d
d:一种都不满足,
f
l
a
g
=
0
flag=0
flag=0时,
d
=
1
d=1
d=1
C代码
#include <stdio.h>
int main()
{
int x;
scanf("%d",&x);
int flag = 0;
if(x % 2 == 0) flag++;
if(x > 4 && x <= 12) flag++;
int a = 0,b = 0,c = 0,d = 0;
if(flag==2) a++;
if(flag>=1) b++;
if(flag==1) c++;
if(flag==0) d++;
printf("%d %d %d %d",a,b,c,d);
return 0;
}
P5711 闰年判断
题目描述
输入一个年份(大于 1582 的整数 ),判断这一年是否是闰年,如果是输出 1,否则输出 0。
输入输出样例 输入
1926
输出
0
题目思路
判断闰年的方法:
1、非整百年份:能被4整除的是闰年。(如2004年就是闰年,2001年不是闰年) 2、整百年份:能被400整除的是闰年。(如2000年是闰年,1900年不是闰年) (摘自百度百科) 根据上面的规则直接写代码即可。
C代码
#include <stdio.h>
int main()
{
int year;
scanf("%d",&year);
int flag = 0;
if(year % 100 == 0)
{
if(year % 400 == 0) flag = 1;
}
else
{
if(year % 4 ==0) flag = 1;
}
printf("%d",flag);
return 0;
}
P5716 月份天数
题目描述
输入年份和月份,输出这一年的这一月有多少天。需要考虑闰年。
输入输出样例 输入
1926 8
输出
31
题目思路
先判断月份是否为2月,如果是2月,则判断一下是不是闰年。 这个题用数组来做比较容易,把12个月的数据存在数组里,但是你们没学过,就用普通的方法来做。
C代码
#include <stdio.h>
int main()
{
int year,mon;
scanf("%d %d",&year,&mon);
if(mon == 2)
{
if(year % 100 == 0)
{
if(year % 400 == 0) printf("29");
else printf("28");
}
else
{
if(year % 4 ==0) printf("29");
else printf("28");
}
}
else if(mon == 4 || mon == 6 || mon == 9 || mon == 11) printf("30");
else printf("31");
return 0;
}
P1422 小玉家的电费
题目描述
夏天到了,各家各户的用电量都增加了许多,相应的电费也交的更多了。小玉家今天收到了一份电费通知单。小玉看到上面写:据闽价电[2006]27号规定,月用电量在150千瓦时及以下部分按每千瓦时0.4463元执行,月用电量在151~400千瓦时的部分按每千瓦时0.4663元执行,月用电量在401千瓦时及以上部分按每千瓦时0.5663元执行;小玉想自己验证一下,电费通知单上应交电费的数目到底是否正确呢。请编写一个程序,已知用电总计,根据电价规定,计算出应交的电费应该是多少。
输入格式
输入一个整数,表示用电总计(单位以千瓦时计),不超过10000。
输出格式
输出一个数,保留到小数点后1位(单位以元计,保留到小数点后1位)。 输入
267
输出
121.5
这个题目很简单,按照题目意思来就行了。注意算的时候细心点。
C代码
#include <stdio.h>
int main()
{
int elc = 0;
scanf("%d",&elc);
double ans = 0;
if(elc >= 401)
{
ans += (elc - 400) * 0.5663;
ans += (400 - 150) * 0.4663;
ans += 150 * 0.4463;
}
else if(elc > 150 && elc < 401)
{
ans += (elc - 150) * 0.4663;
ans += 150 * 0.4463;
}
else ans = elc * 0.4463;
printf("%.1lf",ans);
return 0;
}
P1424 小鱼的航程(改进版)
题目描述
有一只小鱼,它平日每天游泳 250 公里,周末休息(实行双休日),假设从周
x
(
1
≤
x
≤
7
)
x(1≤x≤7)
x(1≤x≤7)开始算起,过了
n
(
n
?
1
0
6
)
n(n\leqslant 10^6)
n(n?106)天以后,小鱼一共累计游泳了多少公里呢?
输入格式
输入两个整数x,n(表示从周x算起,经过n天)。
输出格式
输出一个整数,表示小鱼累计游泳了多少公里。
输入输出样例
输入
3 10
输出
2000
题目思路
1.此题可以先找出数学表达式,然后直接计算求解。 第一步: 将第一周剩余的天数剔除,剩余天数为
k
=
n
?
(
7
?
x
+
1
)
k=n - (7 - x + 1)
k=n?(7?x+1) 计算出n天里有多少个完整的周
a
1
=
k
/
7
a1=k/7
a1=k/7 然后计算出这些完整的周里一共游了多少公里(每周游5天)
a
n
s
1
=
a
1
?
250
?
5
ans1=a1*250*5
ans1=a1?250?5 第二步: 算出结束的那一天是周几
k
%
7
k\%7
k%7 如果
k
%
7
>
5
k\%7>5
k%7>5,则
a
n
s
2
=
5
?
250
ans2=5*250
ans2=5?250 否则
a
n
s
2
=
k
%
7
?
250
ans2=k\%7*250
ans2=k%7?250 第三步: 算出刚开始的那一周游了多远
a
n
s
3
=
(
5
?
x
+
1
)
?
250
ans3=(5-x+1)*250
ans3=(5?x+1)?250 如果
a
n
s
3
ans3
ans3是负数,则说明第一周刚开始在周末,则让
a
n
s
3
ans3
ans3为
0
0
0 最后:
a
n
s
=
a
n
s
1
+
a
n
s
2
+
a
n
s
3
ans=ans1+ans2+ans3
ans=ans1+ans2+ans3
C代码
#include <stdio.h>
int main()
{
int n,x;
scanf("%d %d",&x,&n);
int a1,ans1,ans2,ans3,ans,k;
k = n - (7 - x + 1);
a1 = k/7;
ans1 = a1*250*5;
if (k % 7 > 5) ans2 = 5*250;
else ans2 = (k % 7) * 250;
ans3 = (5 - x + 1) * 250;
if(ans3 < 0) ans3 = 0;
ans = ans1 + ans2 + ans3;
printf("%d",ans);
return 0;
}
2.有一种非常简单的方法,就是暴力模拟小鱼每天的游行情况,如果当天是周六和周日,则不游,否则游250公里。 考虑每个周日,它的数值一定是7的倍数,则每个周六,其值加1也是7的倍数。 因此判断x%7 != 0 && (x + 1)%7 != 0 ,则既不是周六也不是周日
C代码
#include <stdio.h>
int main()
{
int n,x;
scanf("%d %d",&x,&n);
int i = 0;
int ans = 0;
for(i = 0; i < n ; i++,x++)
{
if((x + 1)%7!=0 && x%7!=0) ans += 250;
}
printf("%d",ans);
return 0;
}
P5718 找最小值
给出
n
(
n
<
=
100
)
n(n<=100)
n(n<=100),和
n
n
n个整数
a
i
(
0
<
=
a
i
<
=
1000
)
a_i(0<=a_i<=1000)
ai?(0<=ai?<=1000),求这
n
n
n个整数中最小值是什么。 输入
8 1 9 2 6 0 8 1 7
输出
0
定义一个变量min_num,用于存储最小值,将这个变量初始化为无穷大的数字,这里由于a只取1000,所以将这个变量初始化为大于1000的数。 然后读取数字,只要读取的数字小于min_num,则将min_nuim更新为该数字,最后保留下来的就是最小值。
C代码
#include <stdio.h>
int main()
{
int n;
scanf("%d",&n);
int min_num = 1001;
int i;
for(i = 0; i < n ; i++)
{
int tmp;
scanf("%d",&tmp);
if(tmp < min_num) min_num = tmp;
}
printf("%d",min_num);
return 0;
}
P5721 数字直角三角形
给出
n
(
1
<
=
n
<
=
13
)
n(1<=n<=13)
n(1<=n<=13),请输出一个直角边长度是
n
n
n的数字直角三角形。所有数字都是 2 位组成的,如果没有 2 位则加上前导 0。 输入
5
输出 0102030405 06070809 101112 1314 15
题目思路
这种题以后会遇到很多,核心思想就是找规律。 比如这个题的规律就是输入n,就输出n行,第一行有n个元素,以后的每一行元素个数减一。
#include <stdio.h>
int main()
{
int n;
scanf("%d",&n);
int row = n;
int col = n;
int i,j,cnt = 1;
for(i = 0; i < row ; i++)
{
for(j = 0; j < col ; j++)
{
printf("%02d",cnt);
cnt ++;
}
col--;
printf("\n");
}
return 0;
}
|