输出闰年 输出21世纪中截止某个年份以来的所有闰年年份。注意:闰年的判别条件是该年年份能被4整除但不能被100整除、或者能被400整除。 输入格式: 输入在一行中给出21世纪的某个截止年份。 输出格式: 逐行输出满足条件的所有闰年年份,即每个年份占一行。输入若非21世纪的年份则输出"Invalid year!"。若不存在任何闰年,则输出“None”。 输入样例1: 2048 输出样例1: 2004 2008 2012 2016 2020 2024 2028 2032 2036 2040 2044 2048 输入样例2: 2000 输出样例2: Invalid year!
include<stdio.h>
int main(){
int i,N;
int count = 0;
scanf("%d",&N);
if(N/100==20){
for(i=2000;i<=N;i++){
if(i/4==0 && i/100!=0||i/400==0){
printf("%d\n",i);
count++;
}
}
if(count==0){
printf("None");
return 0;
}
}
else{
printf("Invalid year!");
return 0;
看看这段代码有什么问题,PTA一直报错
第一句少了个#号,倒数第二句少了}
修改如下,改动处见注释,供参考:
#include<stdio.h>
int main(){
int i,N;
int count = 0;
scanf("%d",&N);
if(N > 2000){ //if(N/100==20) // 修改
for(i=2001;i<=N;i++){ // for(i=2000;i<=N;i++) 修改
if(i%4==0 && i%100!=0 || i%400==0){ //if(i/4==0 && i/100!=0||i/400==0) 修改
printf("%d\n",i);
count++;
}
}
if(count==0){
printf("None");
// return 0; 修改
}
}
else{
printf("Invalid year!");
}
return 0;
}
代码,修改见注释:
#include<stdio.h>
int main(){
int i,N;
int count = 0;
scanf("%d",&N);
if(N>2000) //这里
{
for(i=2004;i<=N;i++){ //这里 因为题目说2000年是不算的,所以从2001年开始
//还可以加个小优化,因为第一个闰年是2004,可以从这开始
if(i%4==0&&i%100!=0||i%400==0)
{
printf("%d\n",i);
count++;
}
}
if(count==0)
{
printf("None");
return 0;
}
}
else{
printf("Invalid year!");
return 0;
}
}
不知道你这个问题是否已经解决, 如果还没有解决的话:问题代码存在一些逻辑错误和语法错误。下面是对代码进行改正和优化的解决方案。
#include <stdio.h>
int main() {
int i, N;
int count = 0;
scanf("%d", &N); // 以 %d 格式读取输入年份
if (N >= 2000 && N < 2100) { // 检查输入年份是否是21世纪的年份
for (i = 2000; i <= N; i++) {
if ((i % 4 == 0 && i % 100 != 0) || i % 400 == 0) {
printf("%d\n", i); // 输出满足闰年条件的年份
count++;
}
}
if (count == 0) {
printf("None"); // 若不存在闰年,则输出 "None"
}
}
else {
printf("Invalid year!"); // 若输入年份不符合要求,则输出 "Invalid year!"
}
return 0;
}
请使用以上改正后的代码进行测试,并输入合适的截止年份进行验证。
例子:
输入:
2025
输出:
2000
2004
2008
2012
2016
2020
这段代码使用了 %d
格式化字符串来读取输入年份,通过循环遍历从2000年到输入年份之间的所有年份,判断是否满足闰年的条件,并输出满足条件的闰年年份。如果不存在任何闰年,则输出"None"。如果输入的年份不符合21世纪的范围,则输出"Invalid year!"。