卡bug正确通过的代码
C++ 搞不定,换成python玩玩
def main():
flag = 1
prime = []
for i in range(5, 50, 6):
for j in range(2, i):
if i % j == 0:
break
else:
prime.append(i)
# for j in range(2, i):
# a = prime[0] + 6
for i in range(0,5):
print(prime[i], end=" ")
if __name__ == '__main__':
main()
心路历程:
提示:下边的代码是垃圾,千万别看
思路: 从1开始+6,当相邻的五个数中出现不是质数的时候就停止,然后指向和1最近的下一个质数的位置,然后继续+6,重复上述,依次类推,直到找到一组满足要求的数组。然后把它们输出
用到的工具:
数组的输入,清零,与输出。
还需要一个变量,记录到了数组中的第几个数
想到用while判断数据是否够了五个,但有个bug是他只能进行一次
所以需要当他不满足条件时,进行下一轮循环, while
怎么找到离1最近的那个质数
开始的变量怎么存储
第一版代码
#include<bits/stdc++.h>
using namespace std;
bool flag;
int num=0;
int temp=1;
vector<int> a;
void test(){
for(int i = temp; ;i+6){
for(int j=2;j<temp;j++){
if(temp%j==0){
flag = 0;
}
else{
a.insert(a.end(), i);
num ++;
}
}
while(flag = 0)
{
for(int i = a[0];;i++){
for(int j=2;j<i;j++){
if(i%j==0){
flag = 0;
}
else
{
temp = i;
}
}
}
a.clear();
break;
}
test();
}
}
int main()
{
while(num <=5){
test();
for(int i=0;i<5;i++){
cout<< a[i] << " ";
}
}
return 0;
}
思路二:
核心不变,上面的代码还可以更精简下,始终有一个值指向1,3,5这种
问:怎么能把代码写的更精简
超内存
#include<bits/stdc++.h>
using namespace std;
void test(int temp=2)
{
int num=0;
vector<int> arr;
bool flag = 1;
//从第一个质数开始,+6,每一个数挨个判定他是不是质数,且相差六
while(num<5){
for(int i=temp;i<30;i+6){
for(int j=2;j<i;j++){
if(i%j==0){
flag = 0;
break;
}
else{
arr.insert(arr.end(),i);
}
}
temp = i;
num++;
while(flag = 0)
{
break;
}
}
if(flag == 0)
{
temp = arr[0];
for(int i = temp;i<30;i++) {
for(int j =2;j<i;j++){
if(i%j==0){
flag = 0;
}
else{
temp = i;
test(temp);
}
}
}
}
}
}
int main()
{
test();
vector<int> arr;
int num = 0;
bool flag =1;
if(num==5 and flag == 1){
for(int i=0;i<5;i++){
cout << arr[i];
}
}
return 0;
}