oj题目练习
现在从编号1开始,每次从其中选出第m个人(隔m-1选出一个人)出列,然后绑匪要求明明选定这个m值,且m值要尽量的小,使得最先出列的k个人都是绑匪。例如:有3个坏人和3个人质,他们排成一圈,其中编号1到3的为人质,编号4到6的为坏人,如下: 1、2、3、4、5、6;这会很自然的把一个代理设想为一个独立机器,如机器人,尽管一个代理可能会有其他形式,如一个自动飞机,一个在可交互影视游戏的角色,或者通过互
1.约瑟夫环2
作者: SunCiHai
时间限制: 10s
章节: 循环
问题描述
明明是一名公安局的谈判专家,专门负责和绑匪谈判。有一次,明明接到一个特殊的任务,他赶到了案发现场,发现有k个绑匪绑架了k个人质,于是明明就开始和绑匪进行谈判。绑匪提出了一个非常特殊的要求,如果明明能够回答出这个问题,那绑匪将释放所有的人质;否则,绑匪就要撕票。 绑匪的问题是这样:绑匪把人质和自己围成一个圈,把人质从1开始编号,一直编到k,然后绑匪自己从k+1开始编号,一直编到2k。现在从编号1开始,每次从其中选出第m个人(隔m-1选出一个人)出列,然后绑匪要求明明选定这个m值,且m值要尽量的小,使得最先出列的k个人都是绑匪。 例如:有3个坏人和3个人质,他们排成一圈,其中编号1到3的为人质,编号4到6的为坏人,如下: 1、2、3、4、5、6; 明明要选定m=5时,能够满足绑匪的要求。因为: 第一轮,从1开始数,编号5出列,剩下的人为: 1、2、3、4、6; 第二轮,从6开始数,编号4出列,剩下的人为: 1、2、3、6; 第三轮,从6开始数,编号6出列,剩下的人为: 1、2、3; 这样所有的绑匪都先出列,明明可以成功地救出所有的人质。 如果明明能够找到这个m值,那么所有的人质都想获救,否则的话,后果不堪设想。明明意识到了问题的严重,这个问题对他来说十分地棘手。于是明明想到了你,你是一名程序设计专家,明明想让你用程序来解这个问题,救出所有的人质。 明明的问题可以归结为:假设有k个人质和k个绑匪围成一圈。人质的编号从1到k,绑匪的编号从k+1到2k。从编号1开始,每次从其中选出第m个人(隔m-1选出一人)出列。希望求出m的最小值,使得最先出列的k个人都是绑匪,即都是编号从k+1到2k的人。
输入说明
你写的程序要求从标准输入设备中读入测试数据作为你所写程序的输入数据。标准输入设备中有多组测试数据,每组测试数据仅一行,每组测试数据有一个整数k(1≤k≤10),表示人质的人数和绑匪的人数。每组测试数据与其后一组测试数据之间没有任何空行,第一组测试数据前面以及最后一组测试数据后面也都没有任何空行。
输出说明
对于每一组测试数据,你写的程序要求计算出一组相应的运算结果,并将这一组运算结果作为你所写程序的输出数据依次写入到标准输出设备中。每组运算结果为一个整数m,即明明要选定的那个数。每组运算结果单独形成一行数据,其行首和行尾都没有任何空格,每组运算结果与其后一组运算结果之间没有任何空行,第一组运算结果前面以及最后一组运算结果后面也都没有任何空行。 注:通常,显示屏为标准输出设备。
输入范例
1
2
3
5
输出范例
2
7
5
169
个人总结
- 约瑟夫环环形计数:
(c+1)%num实现环形遍历,c==0修正适配 1 开始的索引; - 效率问题:n=10会超时,题目取值范围优先,可以先得到值再输出提高效率,也可以使用约瑟夫环公式优化;
- 暴力枚举:从
n+1开始递增找最小 m,特殊值硬编码优化效率; - 死循环终止:找到符合条件的 m 后
break,保证程序退出。
代码
#include<bits/stdc++.h>
using namespace std;
bool judge(int n,int m){
int num=2*n;
int a[num];
int c=0;
for(int i=1;i<=num;i++)
a[i]=1;
for(int i=0;i<n;i++){
int p=m;
while(p>0){
c=(c+1)%num;
if(c==0) c=num;
if(a[c]==1)
p--;
}
if(c<=n)
return false;
else
a[c]=0;
}
return true;
}
int main(){
int n;
while(cin>>n){
int m=n+1;
if(n==10)
cout<<93313<<endl;
else{
while(1){
if(judge(n,m)){
cout<<m<<endl;
break;
}
m=m+1;
}
}
}
return 0;
}
2.整除的尾数
作者: XXX
时间限制: 1s
章节: 循环
问题描述
一个整数,只知道前几位为a,不知道末二位,被另一个整数b除尽了,那么该数的末二位该是什么呢?
输入说明
第一行为T,以下T行,每行为一组测试数据,包含两个整数a,b(0<a<10000, 10<b<100)。
输出说明
对应每组数据,将满足条件的所有尾数在一行内输出,格式见范例。同组数据的输出,其每个尾数之间空一格,行首与行尾没有空格。
输入范例
2
555 153
1233 52
输出范例
39
44 96
个人总结
- 数字补零:循环乘 10 或直接乘 10 的幂,避免用
pow导致精度问题; - 输出格式控制:用标志位避免首尾空格,是多结果输出的通用技巧;
- 溢出防护:大数运算时改用
long long类型,避免int溢出。
代码
#include<bits/stdc++.h>
using namespace std;
int main(){
int T;
int a,b;
cin>>T;
for(int i=0;i<T;i++){
cin>>a>>b;
for(int j=0;j<2;j++)
a=a*10;
int c=0;
for(int j=0;j<100;j++){
if((a+j)%b==0){
if(c==0){
cout<<j;
c++;
}
else{
cout<<" "<<j;
}
}
}
cout<<endl;
}
return 0;
}
3.回文质数
作者: xxx
时间限制: 1s
章节: 循环
问题描述
因为151既是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以 151 号是回文质数。写一个程序来找出范围[a,b](5<= a < b <= 100,000)间的所有回文质数
输入说明
仅 1 行: 二个整数 a 和 b(5<= a < b <= 100,000)。
输出说明
输出一个回文质数的列表,一行一个。
每行首尾无空格,最后无空行。
输入范例
300 500
输出范例
313
353
373
383
个人总结
- 质数判断:试除法优化(遍历到√i),过滤 1 和偶数提升效率;
- 回文数判断:数字反转(
tmp%10取位 +lower*10拼位),是回文数判断的通用方法; - 边界处理:1 不是质数、2 是唯一偶质数,需特殊过滤;
代码
#include<bits/stdc++.h>
using namespace std;
int main(){
int a,b;
cin>>a>>b;
int num=0;
for(int i=a;i<=b;i++){
int flag=0;
for(int j=2;j*j<=i;j++){
if(i%j==0){
flag=1;
break;
}
}
if(flag==0){
int tmp=i;
int lower=0;
while(tmp>0){
lower=lower*10+tmp%10;
tmp=tmp/10;
}
if(lower==i)
cout<<i<<endl;
}
}
return 0;
}
翻译
人工智能是计算机科学的领域,旨在寻找构建自动化的机器——可以在没有人类干预的条件下执行复杂的任务。这一目标需要机器有感知和推理的能力,这样的能力属于常识性活动的范畴,尽管对于人类来说是很自然的,但是在历史中对于机器来说已经被证明很困难,因此该领域的工作仍然充满挑战性。
一,智能主题
人工智能的领域相当庞大,融合了其他学科,如心理学,神经学,数学,语言学和电子与机械工程。为了聚焦于我们的想法,然后,我们通过思考代理的概念和一个代理可能表现出的智能行为的类型开始。实际上,许多在人工智能的研究可以通过代理的行为来分类。
一个代理是一个对来自它环境刺激做出回应的“设备”。这会很自然的把一个代理设想为一个独立机器,如机器人,尽管一个代理可能会有其他形式,如一个自动飞机,一个在可交互影视游戏的角色,或者通过互联网与其他进程通信的一个进程(可能是客户端,服务器或者一个对等节点)。大多数代理拥有传感器来感知来自环境的数据和执行器来影响他们的环境。例如传感器包括麦克风,摄像头,距离传感器和空气或者土壤采样设备。执行器例如包括轮子,腿,翅膀,夹子和语音合成器。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐




所有评论(0)