当前位置:网站首页>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))
边栏推荐
猜你喜欢
智能合约安全——delegatecall (2)
【Matlab仿真】:一带电量为q的电荷以速度v运动,求运动电荷产生磁感应强度
7.15 Day21---MySQL----Index
webrtc中的任务队列TaskQueue
webrtc中视频采集实现分析(一) 采集及图像处理接口封装
8.03 Day34---BaseMapper query statement usage
Embedded system driver primary [4] - under the basis of character device driver _ concurrency control
ISCC-2022
7.15 Day21---MySQL----索引
ISCC2021——web部分
随机推荐
OpenGLES 学习之帧缓存
大龄程序员的心理建设
MySql data recovery method personal summary
MySQL database (basic)
对象存储-分布式文件系统-MinIO-2:服务端部署
实际开发中左菜单自定义图标点击切换
箭头函数的使用
自己学习爬虫写的基础小函数
实际开发中,客户要求密码输入框禁止粘贴~
页面刷新没有执行watch?
基于C语言的学生信息管理系统_(更新版)_(附源码和安装包)_课程设计_**往事随風**的博客
关系型数据库-MySQL:体系结构
Deploy LVS-DR cluster [experimental]
ORACLE LINUX 6.5 安装重启后Kernel panic - not syncing : Fatal exception
JNI基本使用
IP地址查询
php将多维数据保存进json文件
4.1 JdbcTemplate for declarative transactions
关于let var 和const的区别以及使用
The string class introduction