用的是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");
}
檢查了很多遍,但是程式一直處于下面這個狀態:
uj5u.com熱心網友回復:
一個整數包含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;包含在{}內。
uj5u.com熱心網友回復:
當i為354時,包含了5這個數字。n=i放在花括號外面是為了輸出時,保持不變。
uj5u.com熱心網友回復:
如果{}是第2個for的話,第一個for都跑完1000了。按照這樣的代碼邏輯,第一個for跑完成,第二個for永遠跑不完?
uj5u.com熱心網友回復:
我又重新改了一下#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");
}
uj5u.com熱心網友回復:
那好,就算是6的倍數不會有遺漏。修改后的邏輯第二個for能跑完?
uj5u.com熱心網友回復:
讓i除以10,總會得到0,我真的看不出有問題,但是程式一直運行不停止,應該就是程式在一直跑。不知道為啥。
uj5u.com熱心網友回復:
能不能加下你的qq,這樣好截頻。
uj5u.com熱心網友回復:
這樣修改一下一定能跑完
for(flag1=0,n=i,flag2=0;i!=0;)
a=i%10,i/=10;
uj5u.com熱心網友回復:
把{}弄好大概就可以了。uj5u.com熱心網友回復:
這道題一個一個數去試,是一種低效的演算法。其實就是最多4位數,把5和3放到不同的位置,求排列,最后依次求出是否為6整除。
uj5u.com熱心網友回復:
4位數a、b、c、d
--------------------------------------------------------------------------------
(a+b+c+d)%3==0
&&
d%2==0【同時被2和3整除】
&&
...其它...
--------------------------------------------------------------------------------
(至少一位是3一位是5)【至少一位是3一位是5又意味著另外兩位(m+n)%3 == 1】
uj5u.com熱心網友回復:
m+n = 1、4、7、10、13、17m、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
}
uj5u.com熱心網友回復:
#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;
}
uj5u.com熱心網友回復:
不過好像有點蠢了,直接while(int i++)
{
value = i*6;
//判斷就可以了啊
//if{break;}
}
uj5u.com熱心網友回復:
真。。。我數學草稿紙打表都能算出來。樓上那人是對的,這里提供一共數學演算法而已。。
一位是 3,一位是 5 ,肯定再填一位。所以答案應該是:
354
534
就這兩個數,你有什么好列舉的呢
uj5u.com熱心網友回復:
1000以內。。我也是醉了。。審題不清。自己該挨兩下uj5u.com熱心網友回復:
不用私信,有錯是正常的,人類就是向錯誤學習而進步的,在這里提問錯和對都有益。
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); }
}
uj5u.com熱心網友回復:
遇到不少這樣的好似有錯誤要掩飾似地私信,不用這樣怕錯誤,有錯誤才能進步并不可恥,就是莫學某輩人拿別人一星半點的錯誤揪住不放地取笑或說些不尊重的話的那才是無恥之輩。轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/85986.html
標籤:C++ 語言
上一篇:為什么會出現程式中的 0x00be1789 處最可能的例外: 0xC0000005: 讀取位置 0x0007d000 時發生訪問沖突的錯誤呢?
