当前位置:网站首页>8.30难题留坑:计数器问题和素数等差数列问题
8.30难题留坑:计数器问题和素数等差数列问题
2022-08-04 05:27:00 【何亚告】
假期使人成猪,一个多月来其实有几次写博客的冲动,但是每次都是写一半没有坚持下来,一转眼就开学了。
放假这段时间看到两个很有意思的题目:计数器问题和素数等差数列问题。
1.计数器问题
无意在知乎看到这样一个问题,突然兴趣上头。
#include<iostream>
using namespace std;
int main(){
int count;
count=0;
int x;
x=0;
while(x<=8){
int ra=rand()%2;
if(ra=0){
x++;
}
else{
x--;
}
count++;
}
cout<<count<<endl;
return 0;
}
输出结果为负,说明运算次数很大,而且同时暴露出一个问题,想要计算这个事件的平均次数,是一个很庞大的计算量。
将int换成double类型终于能给我一个数字了:
#include<iostream>
using namespace std;
int main(){
double count;
count=0;
int x;
x=0;
while(x<=8){
int ra=rand()%2;
if(ra=0){
x++;
}
else{
x--;
}
count++;
}
cout<<count<<endl;
return 0;
}但是未解决的问题就是,如何得出一个平均的值呢?这也许还得从概率论的方式去解决,同时一个很简单的数学问题也暴露出一个c++我觉得不完美的地方,就是rand函数。
上个月底集卡牌游戏《未定事件簿》横空出世我手痒痒写了一个模拟抽卡的模拟器,但是没想到在随机数生成这里碰了壁,朋友vb写的模拟器成了,于是我也放弃了攻克这个难题。
很可悲一个快成形的小程序就这样被抛弃期间试过用种子,也尝试过srand(unsigned)time(null),但是如果button点击较快,仍然无法生成想要的随机数。
2.素数等差数列问题
这是在看蓝桥杯真题时看到的一题,初看可能觉得没有难度但是如果把这题当成一个方程问题来看,其实是多了一个未知数的,可是我想写在一个主函数中暴力求解的想法在最后写到三重循环时放弃了。
这是我写的失败代码,准备找到问题再回头找找自己的问题:
#include <iostream>
using namespace std;
int p1[100010];
int main()
{
for(int m=0;m<20000;m++){
p1[m]=1;
}
for(int i=4;i<20000;i++){
for(int j=2;j<i;j++){
if(i%j==0){
p1[i]=0;
break;
}
}
}
for(int n=3;n<20000;n++){
if(p1[n]){
for(int s1=30;s1<1000;s1++){
for(int s2=1;s2<=10;s2++){
if(p1[n+s1*s2]=0){
break;
}
}
if(s2=10){
cout<<s1<<endl;
break;
}
}
}
}
return 0;
}

输出都乱七八糟了。。。
#include <bits/stdc++.h>
using namespace std;
int p[100010];
int prim[100010];
int len=0;
void isp()
{
memset(p,0,sizeof(p));
p[0]=1;p[1]=1;p[2]=0;
for(int i=0;i<10000;i++)
{
if(p[i])
continue;
for(int j=i;j*i<10000;j++)
{
p[i*j]=1;
}
prim[len++]=i;
}
}
int main()
{
isp();
for(int i=0;i<len;i++)
{
int ss=prim[i];
for(int c=1;c<1000;c++)
{
int j;
for(j=1;j<10;j++)
{
if(p[ss+c*j])
break;
}
if(j>=10)
{
cout<<c<<' '<<ss<<endl;
return 0;
}
}
}
}附上学霸教我的python的解法:
def main(n):
i = 2
data = [] # 素数
while(True):
flag = 1
for a in range(2, i): # 判断素数
if i % a == 0:
flag = 0
break
if flag:
data.append(i)
# 数列首元素
for m in range(len(data)):
# 公差
for t in range(1, data[len(data)-1]):
temp = data[m]
result = [temp]
while(True):
if (temp + t) in data:
result.append(temp+t)
if len(result) == n:
print(result)
return t
else:
break
temp = temp + t
i = i+1
print(main(10))
边栏推荐
猜你喜欢

程序员也应了解的Unity粒子系统

【问题解决】同一机器上Flask部署TensorRT报错记录

(Kettle) pdi-ce-8.2 连接MySQL8.x数据库时驱动问题之终极探讨及解决方法分析

ISCC-2022

【Matlab仿真】:一带电量为q的电荷以速度v运动,求运动电荷产生磁感应强度

scrapy 爬取当当图书名字图片

Summary of MySQL database interview questions (2022 latest version)

Can 't connect to MySQL server on' localhost3306 '(10061) simple solutions

ISCC2021——web部分

将两个DataTable合并——DataTable.Merge 方法
随机推荐
程序、进程、线程、协程的概念及区别
12. Paging plugin
Commons Collections2
php实现telnet访问端口
Cannot read properties of null (reading 'insertBefore')
Handling List
Deploy LVS-DR cluster [experimental]
webtrc 中VideoAdapter类中的作用及局限
webrtc中的任务队列TaskQueue
MediaCodec支持的类型
Upload靶场搭建&&第一二关
字符串常用方法
keep-alive的使用及详解
自动化运维工具Ansible(7)roles
TensorRTx-YOLOv5工程解读(二)
手把手教你实现buffer(二)——内存管理及移动语义
编程Go:内置打印函数 print、println 和 fmt 包中 fmt.Print、fmt.Println 的区别
[原创]STL容器map和unordered_map性能,创建,插入,随机访问速度对比!
自动化运维工具Ansible(2)ad-hoc
关系型数据库-MySQL:多实例配置