问题描述
- 标题是--数据输出,求大神指点迷津
-
输入整数n(n<100)和m(m<10),输出m和m的倍数,还有包含m的数字,例如(6,12,16,18...60,66,72,76...)。Input
输入正整数n和m。
Output
输出从小到大排列的不大于n的与m有关的数字。每组数据占一行,每个数字后面有一个空格。
Sample Input
30 6
Sample Output6 12 16 18 24 26 30
HINT最后一个数字后面也有空格
代码如下
#include
int main()
{
int n,m,i;
scanf("%d %d",&n,&m);
for(i=1;i<=n;i++)
{
if(i%m==0||i%10==6)
printf("%d ",i);
}
printf("n");
return 0;
}
测试没错,就是提交错误
解决方案
改为:
if(i%m==0||i%10==m||i/10==m)
解决方案二:
//.cpp
#include <stdio.h>
int main(){
int m, n;
while (scanf("%d%d", &n, &m) != EOF) {
for (int i = 1; i <= n; i++){
//判断i是否是m的倍数
if (i % m == 0){
printf("%d ", i);
continue;
}
//判断i中是否包含m
//注意:题设m<10 , 意味m为0~9的单个数字,若m>10呢? ...
if (i > m){
int remainder;
int intresult = i;
//此处使用循环整除 比如 45 对于 4 余数45%10 =5 整除结果45/10 = 4 5!=4 再循环,此时4/10 = 0 4%10 =4; 4==4 ok得结果;
while (intresult > m ){
remainder = intresult % 10;
intresult = intresult / 10;
if (remainder == m){
printf("%d ", i);
break;
}
}
}
}
printf("n");
}
}
解决方案三:
对,关键是要正确的实现“包含”操作。在遍历n的过程中,看m是否是n的十位数或者个位数。
如果不强调效率的话,可以转换为一个判断是否为子串的操作。
解决方案四:
包含m的数没注意所在数位,请你再看一下吧~
解决方案五:
错误很明显,if语句后 i%10 == m
解决方案六:
是的,这点我只是针对此题了,但是改过后还是不对
解决方案七:
提交上面显示社么错误么?
解决方案八:
=================/data5.out
Right:
9 18 19
Your:
6 9 16 18
解决方案九:
if(i%m==0||i%10==6)
改为
if(i%m==0||i%10==m)
解决方案十:
if(i%m==0||i%10==m||i/10==m)
时间: 2024-09-30 03:08:47