编程题一:
- 题目描述:输入数字 n ,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3 ,则打印出 1、2、3 一直到最大的 3 位
数 999 。
- 用返回一个整数列表来代替打印
- n 为正整数
示例1:
输入1
输出:[1,2,3,4,5,6,7,8,9]示例2:
输入 2
输出:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17…………95,96,97,98,99]
分析:题目需要一个数字,那我们就给一个输入,然后是按顺序遍历,那么需要用到循环,从示例中很好看出循环初始值和判断条件,变量调整就不用阐述。然而,需要考虑的是循环判断条件怎样产生呢?不可能从9改到99……999999?这里需要和我们输入的那个数产生联系。我们看到输入1,最大就是9,而10就是边界,10=10;输入2,最大就是99,100=10*10;输入3,以此内推,我们就可以用一个循环,把判断条件的边界值找出来,用一个变量接收,作为循环判断的条件,代码如下👇👇👇👇:
#include<stdio.h>
int main()
{
int number = 0;
printf("请输入一个数:\n");
scanf_s("%d", &number);
int num = 1;
for (int i = 1; i <= number; i++)//输入的数字是多少,就循环这么多次
{
num *= 10;//如3,则num=1000,最大就是999
}
for (int j = 1; j < num; j++)
{
printf("%d ", j);
if (j % 10 == 0)//为了整齐,换个行
printf("\n");
}
return 0;
}
代码结果展示👀👀👀:
编程题二
- 题目描述:根据输入的日期,计算是这一年的第几天。
保证年份为4位数且日期合法。
输入描述:
输入一行,每行空格分割,分别是年,月,日
输出描述:
输出是这一年的第几天
示例:
输入:2012 12 31
输出:366
- 分析:我们看到根据输入年份来计算这一年过去了多少天,脑海中第一想到的就是年分为闰年【366】和平年【365】;所以判断是什么年必须要。其次就是我们要怎样把每个月的天数加起来呢?我们输入的只是年月日,所以我们可以根据每一年的月份的天数用一个一维数组存储【一开始写平年的天数划分】,因为每年除了2月有变化,其他第是按大小月划分的。之后我们再去计算天数就可以分为两类了,先判断输入的年份是闰年还是平年,是平年就直接求【输入月份是小于2月的,就直接是日数,大于2的就得把month对应的天数加上日数】。如果是闰年就得在前面的基础上加上1天【在输入月份大于2月份的时候才加一天,因为2月以前都是一样的】。代码展示👇👇👇:
#include<stdio.h>
int isLeap(int year)
{
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
return 1;
else
return 0;
}
int main()
{
int arr[] = { 0,31,28,31,30,31,30,31,31,30,31,30 };//平年,闰年就加一天就欧克,最后一个月直接从day里面加就OK。
int year = 0, month = 0, day = 0;
int count = 0;//计算总的天数
printf("请输入合法日期:\n");
scanf_s("%d %d %d", &year, &month, &day);
//先不管是什么年,直接把month前面的天数相加
for (int i = 1; i < month; i++)
{
count += arr[i];
}
count += day;
//如果是闰年就得加一天,所以接下来判断
if (isLeap(year))
{
if (month >= 3)//要到达或超过3月份才加以1
count += 1;
}
//如果是平年就直接输出
printf("该日期是这一年的%d天\n", count);
return 0;
}
代码结果👀👀👀: