编写一个程序输出1000以内所有能被6整除,而且至少有一位数字是5、一位数字是3的所有正整数。

qq_45996839 2020-04-10 10:28:01
用的是visualc++2010
代码如下:
#include <stdio.h>
#include <stdlib.h>
void main()
{
int i,flag1,flag2,a,n;
for(i=6;i<=1000;i=i+6)
n=i;
{
for(flag1=0,flag2=0;i!=0;)
a=i%10;
if(a==5){flag1++;}
if(a==3){flag2++;}
i=i/10;
if(flag1>=1&&flag2>=1)
printf("%d",n);
}
system("pause");
}
检查了很多遍,但是程序一直处于下面这个状态:
...全文
1645 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
遇到不少这样的好似有错误要掩饰似地私信,不用这样怕错误,有错误才能进步并不可耻,就是莫学某辈人拿别人一星半点的错误揪住不放地取笑或说些不尊重的话的那才是无耻之辈。
  • 打赏
  • 举报
回复
不用私信,有错是正常的,人类就是向错误学习而进步的,在这里提问错和对都有益。

	int i, flag1, flag2, a, n;
	for (i = 6; i <= 1000; i = i + 6)
		for (flag1 = 0, n = i, flag2 = 0; n != 0;){
			a = n % 10;
			if (a == 5){ flag1++; }
			if (a == 3){ flag2++; }
			n = n / 10;
		
		if (flag1 >= 1 && flag2 >= 1){ printf("%d ", i); }
}
千梦一生 2020-04-10
  • 打赏
  • 举报
回复
1000以内。。我也是醉了。。审题不清。自己该挨两下
bifanwen 2020-04-10
  • 打赏
  • 举报
回复
真。。。我数学草稿纸打表都能算出来。 楼上那人是对的,这里提供一共数学算法而已。。 一位是 3,一位是 5 ,肯定再填一位。所以答案应该是: 354 534 就这两个数,你有什么好枚举的呢
千梦一生 2020-04-10
  • 打赏
  • 举报
回复
不过好像有点蠢了,直接
while(int i++)
{
value = i*6;
//判断就可以了啊
//if{break;}
}
  • 打赏
  • 举报
回复

#include <stdio.h>

int main()
{
for (int i = 0; i < 10; i += 2)
{
if (!((350 + i) % 6)) printf("35%d\n", i);
if (!((530 + i) % 6)) printf("53%d\n", i);
}

return 0;
}

千梦一生 2020-04-10
  • 打赏
  • 举报
回复
m+n = 1、4、7、10、13、17

m、n中必有偶数,

{m,n} =
{
0 1
0 4
0 7
2 2
2 5
2 8
4 3
4 6
6 1
6 4
6 7
8 2
8 5
8 9
}

千梦一生 2020-04-10
  • 打赏
  • 举报
回复
4位数
a、b、c、d
--------------------------------------------------------------------------------
(a+b+c+d)%3==0
&&
d%2==0【同时被2和3整除】
&&
...其它...
--------------------------------------------------------------------------------
(至少一位是3一位是5)【至少一位是3一位是5又意味着另外两位(m+n)%3 == 1】
真相重于对错 2020-04-10
  • 打赏
  • 举报
回复
这道题一个一个数去试,是一种低效的算法。 其实就是最多4位数,把5和3放到不同的位置,求排列,最后依次求出是否为6整除。
  • 打赏
  • 举报
回复
把{}弄好大概就可以了。
  • 打赏
  • 举报
回复
这样修改一下一定能跑完

for(flag1=0,n=i,flag2=0;i!=0;)
    a=i%10,i/=10;
qq_45996839 2020-04-10
  • 打赏
  • 举报
回复
引用 9 楼 智者知已应修善业的回复:
猜不出是用编辑器在运行
能不能加下你的qq,这样好截频。
qq_45996839 2020-04-10
  • 打赏
  • 举报
回复
引用 6 楼 智者知已应修善业的回复:
那好,就算是6的倍数不会有遗漏。 修改后的逻辑第二个for能跑完?
让i除以10,总会得到0,我真的看不出有问题,但是程序一直运行不停止,应该就是程序在一直跑。不知道为啥。
  • 打赏
  • 举报
回复
那好,就算是6的倍数不会有遗漏。 修改后的逻辑第二个for能跑完?
qq_45996839 2020-04-10
  • 打赏
  • 举报
回复
我又重新改了一下
#include <stdio.h>
#include <stdlib.h>
void main()
{
int i,flag1,flag2,a,n;
for(i=6;i<=1000;i=i+6)//i每次增加6,下面开始从6开始看它是否同时至少含有5和6
for(flag1=0,n=i,flag2=0;i!=0;)
a=i%10;
if(a==5){flag1++;}
if(a==3){flag2++;}
i=i/10;
if(flag1>=1&&flag2>=1){printf("%d",n);}//如果含有5和6都至少一个,就输出该值
system("pause");
}
  • 打赏
  • 举报
回复
如果{}是第2个for的话,第一个for都跑完1000了。 按照这样的代码逻辑,第一个for跑完成,第二个for永远跑不完?
qq_45996839 2020-04-10
  • 打赏
  • 举报
回复
引用 1 楼 智者知已应修善业的回复:
一个整数包含3和5能被6整除,从6开始太小了,至少从35开始才能包含2位数字. 步进6一厢情愿,5*6=30,66=36,何时能包含5这个数字? for(i=6;i<=1000;i=i+6)n=i; {}这对花括号有何用? for(flag1=0,flag2=0;i!=0;)如果使用i则应把n=i;包含在{}内。
当i为354时,包含了5这个数字。n=i放在花括号外面是为了输出时,保持不变。
  • 打赏
  • 举报
回复
一个整数包含3和5能被6整除,从6开始太小了,至少从35开始才能包含2位数字. 步进6一厢情愿,5*6=30,66=36,何时能包含5这个数字? for(i=6;i<=1000;i=i+6)n=i; {}这对花括号有何用? for(flag1=0,flag2=0;i!=0;)如果使用i则应把n=i;包含在{}内。

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧