题目:
7-4 4.16-输出小于某数的所有奇数
分数 10
全屏浏览题目
切换布局
作者 张伟
单位 杭州职业技术学院
编写一段程序, 输入一个整数值, 显示该整数值以下的所有奇数.
-----出自【明解C语言】练习4-16.
整数值:15
1 3 5 7 9 11 13 15
注:若非正整数,则什么也不输出。
输入样例:
15
输出样例:
整数值:1 3 5 7 9 11 13 15
代码长度限制
16 KB
时间限制
400 ms
内存限制
1 MB
个人观点:
这道题我做错了几次,原因在于我的答案后面有空格的问题!
例如:1 3 5 7 9 11 13 15*(“*”代表空格)
我的15后面有一个空格,所以导致答案错误!
所以,这道题目关键在于怎么处理好“空格”!
我再CSDN上找到一个十分标准的答案:
这是链接,可以去看看:
#include <stdio.h>
#include <math.h>
int main()
{
int a, n;
scanf("%d",&a);
printf("整数值:");
for(n=0;n<=a;n++)
{
if(n==1)
{
printf("%d",n);
}
else if(n%2==1)
{
printf(" %d",n);
}
}
return 0;
}
这组代码的好处是在n=1的时候就处理好空格的问题了。
我看了答案之后,认为也要有属于自己的答案与想法,所以我想出了另一种思路,把处理空格的问题留到最后解决,所以我的答案相对复杂,但也是用了分类讨论思想。
我的答案:
#include <stdio.h>
#include <math.h>
int main (void)
{
int m,i,x;
scanf("%d",&m);
printf("整数值:");
for(i=0;i<=m;i++)
{
if(i%2 != 0 && i!=m && i != m-1)
{
printf("%d ",i);
}
//先判断M的奇偶性
else if(i%2 != 0 && i ==m)//奇数
{
printf("%d",m);
}
else if(i%2 == 0 && i==m)//偶数
{
x = m-1;
printf("%d",x);
}
}
return 0;
}
//总结,这道题的关键是输入的这个整数m,对输出后面的空格进行处理,
//比如15后面有空格是错误的,关键在于怎么处理后面这个空格
//我用了分类讨论思想
我是对输入的这个整数m进行处理的,当其为奇数时候怎么处理,当其为偶数时怎么处理这两种情况。
首先,我用了for循环语句,把i=m-1就结束
再用if语句对m进行分类讨论,如果m是奇数,直接%d,后面是没有空格的!
如果m是偶数,则m不会被打印出来,这时候就要打印m前面的那个数,即m-1了
这就是为什么for循环到m-1就结束,而不是到m结束的原因,因为我要对m进行分类讨论!
总结:
①整道题核心在于打印时 对数字后面空格的处理
②用到分类讨论的思想
欢迎评论、关注和转发!