7-16至7-25
作者:互联网
7-16 回文日期 (100 分)
2020 年春节期间,有一个特殊的日期引起了大家的注意:2020年2月2日。因为如果将这个日期按“yyyymmdd” 的格式写成一个8 位数是20200202,恰好是一个回文数。我们称这样的日期是回文日期。
有人表示20200202 是“千年一遇” 的特殊日子。对此小明很不认同,因为不到2年之后就是下一个回文日期:20211202 即2021年12月2日。 也有人表示20200202 并不仅仅是一个回文日期,还是一个ABABBABA型的回文日期。对此小明也不认同,因为大约100 年后就能遇到下一个ABABBABA 型的回文日期:21211212 即2121 年12 月12 日。算不上“千年一遇”,顶多算“千年两遇”。
给定一个8 位数的日期,请你计算该日期之后下一个回文日期和下一个ABABBABA型的回文日期各是哪一天。
输入格式
输入包含一个八位整数N,表示日期。
输出格式
输出两行,每行1 个八位数。第一行表示下一个回文日期,第二行表示下一个ABABBABA 型的回文日期。
样例输入
20200202
样例输出
20211202
21211212
样例输入
89991231
样例输出
90011009
90900909
评测用例规模与约定
对于所有评测用例,10000101 ≤ N ≤ 89991231,保证N 是一个合法日期的8位数表示。
提示
本题目选自蓝桥杯竞赛,增加了一组测试样例。
#include <stdio.h>
#include <stdlib.h>
int getT(int n)
{
int a[2];
a[1] = n%10;
a[0] = n/10;
n=0;
n = a[1]*10+a[0];
return n;
}
int inArray(int t,int a[],int n){
for(int i=0;i<n;i++){
if(t==a[i]) return 1;
}
return 0;
}
int isRun(int n){
if(n%400==0) return 1;
else if(n%100==0) return 0;
else if(n%4==0) return 1;
else return 0;
}
int main(void)
{
int big[7] = {1,3,5,7,8,10,12};
int small[11] = {1,3,4,5,6,7,8,9,10,11,12};
int all[12] = {1,2,3,4,5,6,7,8,9,10,11,12};
int a,b,c,d;
scanf("%2d%2d%2d%2d",&a,&b,&c,&d);
int p = a,q=b,k=c,l=d;
int flag=0;
if(getT(a)==d&&getT(b)==c) {q++;k=1;l=1;flag=1;}
if(q==100) {q=0;p++;}
while(p!=getT(l)||q!=getT(k)){
l++;
if(k==2&&l==30&&isRun(p*100+q)){k++;l=1;}
else if(k==2&&l==29&&(!isRun(p*100+q))){k++;l=1;}
else if(l==31&&(k==4||k==6||k==9||k==11)){k++;l=1;}
else if(l==32){k++;l=1;}
if(k==13){q++;k=1;}
if(q==100) {q=0;p++;}
}
printf("%02d%02d%02d%02d\n",p,q,k,l);
int n = getT(a);
if(n<1||n>12){
while(n<1||n>12){
a++;
n = getT(a);
}
printf("%02d%02d%02d%02d",getT(n),getT(n),n,n);
}
else if(b>a){
a++;n = getT(a);
while(n<1||n>12){
a++;
n = getT(a);
}
printf("%02d%02d%02d%02d",getT(n),getT(n),n,n);
}
else if(b<a) printf("%02d%02d%02d%02d",getT(n),getT(n),n,n);
else if(c>n){
a++;n = getT(a);
while(n<1||n>12){
a++;
n = getT(a);
}
printf("%02d%02d%02d%02d",getT(n),getT(n),n,n);
}
else if(c<n) printf("%02d%02d%02d%02d",getT(n),getT(n),n,n);
else if(d>=n){
a++;n = getT(a);
while(n<1||n>12){
a++;
n = getT(a);
}
printf("%02d%02d%02d%02d",getT(n),getT(n),n,n);
}
else printf("%02d%02d%02d%02d",getT(n),getT(n),n,n);
}
7-17 找“重点” (10 分)
在一个N×N的矩阵中,如果某个元素的值大于其上下左右四个相邻元素之和,则本题称这个元素为“重点”。本题要求寻找给定矩阵中的所有“重点”。
需要注意的是:
- 矩阵中元素的坐标采用
(x,y)
的形式,x
为元素所在的行号、y
为元素所在的列号,x
和y
均从0
开始 - 矩阵的行号由上至下增长;列号从左到右增长
- 最上方一行的元素,其“上方”相邻元素,位于同列的最下方一行
- 最下方一行的元素,其“下方”相邻元素,位于同列的最上方一行
- 最左方一列的元素,其“左方”相邻元素,位于同行的最右方一列
- 最右方一列的元素,其“右方”相邻元素,位于同行的最左方一列
输入格式:
第一行给出一个不大于400
的正整数N
,
接下来N行,每行N个不超过500的正整数,用空格分隔,依次是矩阵从最上方一行开始、每行从左至右排列的N×N个元素。
输出格式:
如果矩阵中有“重点”,则在每行输出一个“重点”元素的坐标,若需要输出的元素多于一个,则按照行号从小到大、同一行中列号从小到大的顺序输出。每个坐标先输出行号、再输出列号,中间空一格。
如果矩阵中没有“重点”,则在一行中先输出None!
然后输出矩阵中所有元素之和,中间空一格。
输入样例1:
4
1 1 1 1
1 5 1 5
1 1 1 1
1 1 5 1
输出样例1:
1 1
1 3
3 2
输入样例2:
3
1 1 1
1 1 1
1 1 1
输出样例2:
None! 9
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int n,flag=0,sum=0;
scanf("%d",&n);
int a[n][n];
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
scanf("%d",&a[i][j]);
sum+=a[i][j];
}
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
int top = (j-1+n)%n,down = (j+1+n)%n;
int left = (i-1+n)%n,right = (i+1+n)%n;
if(a[i][j]>a[i][top]+a[i][down]+a[left][j]+a[right][j]){
flag=1;
printf("%d %d\n",i,j);
}
}
}
if(flag==0) printf("None! %d\n",sum);
}
7-18 平行四边形(2)(*) (10 分)
请编写程序,输入平行四边形的宽度和高度,输出由星号组成的平行四边形。
输入格式
宽度、高度 (均为正整数)
输出格式
星号组成的平行四边形 (参见输出样例)
输入样例
10 5
输出样例
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
提示:星号之间空一格,行末没有多余的空格。
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int m,n;
scanf("%d%d",&m,&n);
for(int i=0;i<n;i++){
for(int j=1;j<n-i;j++) printf(" ");
for(int j=0;j<m;j++) {
printf("*");
if(j!=m-1) printf(" ");
}
printf("\n");
}
}
7-19 平行四边形(1)(*) (10 分)
请编写程序,输入平行四边形的宽度和高度,输出由星号组成的平行四边形。
输入格式
宽度、高度 (均为正整数)
输出格式
星号组成的平行四边形 (参见输出样例)
输入样例
20 5
输出样例
********************
********************
********************
********************
********************
提示:行末没有多余的空格。
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int m,n;
scanf("%d%d",&m,&n);
for(int i=0;i<n;i++){
for(int j=1;j<n-i;j++) printf(" ");
for(int j=0;j<m;j++) {
printf("*");
}
printf("\n");
}
}
7-20 双曲正弦函数(*) (10 分)
根据麦克劳林公式计算 sinhx 的值。
输入格式
x ϵ
注:x 为指数,ϵ 为计算精度。
输出格式
y
注:y 为 ex 的值。用 %f 格式限定符输出 6 位小数。
要求:所计算的最后一项的绝对值小于 ϵ。
输入样例
0.5 0.0000001
输出样例
0.521095
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
double fun1(int n){
double t=1.0;
for(n;n>0;n--)t*=n;
return t;
}
double fun2(double x,int n){
double t=1;
for(n;n>0;n--)t*=x;
return t;
}
int main(void)
{
double x,e,s;
double sum = 0;
scanf("%lf%lf",&x,&e);
int i=1;
do{
s = fun2(x,i)/fun1(i);
sum = sum+s;
i+=2;
}while(e<fabs(s));
printf("%.6f",sum);
}
7-21 双曲余弦函数(*) (10 分)
根据麦克劳林公式计算 coshx 的值。
输入格式
x ϵ
注:x 为指数,ϵ 为计算精度。
输出格式
y
注:y 为 coshx 的值。用 %f 格式限定符输出 6 位小数。
要求:所计算的最后一项的绝对值小于 ϵ。
输入样例
0.5 0.0000001
输出样例
1.127626
#include <stdio.h>
int main(){
int a;
int b;
int r=1;
scanf("%d%d",&a,&b);
while(r!=0){
r = a % b;
a = b;
b = r;
}
printf("%d\n",a);
return 0;
}
7-22 输出最大公约数 (100 分)
输入两个数,输出它们的最大公约数。
输入样例:
36 24
输出样例:
12
#include <stdio.h>
int main(){
int a;
int b;
int r=1;
scanf("%d%d",&a,&b);
while(r!=0){
r = a % b;
a = b;
b = r;
}
printf("%d\n",a);
return 0;
}
7-23 输出最小公倍数 (100 分)
输入两个数,输出它们的最小公倍数。
输入样例:
36 24
输出样例:
72
#include <stdio.h>
int main(){
int a;
int b;
int r=1;
scanf("%d%d",&a,&b);
int k = a*b;
while(r!=0){
r = a % b;
a = b;
b = r;
}
printf("%d\n",k/a);
return 0;
}
7-24 素数判断 (100 分)
输入一个正整数,输出其是否为素数。
输入样例:
15
输出样例:
NO
输入样例:
53
输出样例:
YES
#include <stdio.h>
int main(){
int a;
scanf("%d",&a);
if(a==0||a==1)printf("NO\n");
else if(a==2)printf("YES");
else {
int flag = 1;
for(int i=2;i<a;i++){
if(a%i==0) {printf("NO\n");flag=0;break;}
}
if(flag) printf("YES\n");
}
return 0;
}
7-25 根号2的迭代 (90 分)
有一个迭代公式:xn=√xn−1+2,无论x的初值(正数)选的多么大,若干次迭代之后,都与√2无限接近,也就是说x序列的极限是√2。假设x0=99999999(8个9),编程输入一个正整数n,输出xn的值(保留10位小数)。
输入样例:
8
输出样例:
x[8]=2.0051798692
输入样例:
16
输出样例:
x[16]=2.0000000790
#include <stdio.h>
#include <math.h>
double func(int n)
{
if(n==0) return 99999999;
return sqrt(func(n-1)+2);
}
int main(){
int n;
scanf("%d",&n);
printf("x[%d]=%.10f",n,func(n));
}
标签:25,输出,int,16,样例,include,getT,输入 来源: https://blog.csdn.net/qq_56165953/article/details/116648659