第一题
题目描述
某监狱有一个由n个牢房组成的大厅,每个牢房紧挨着。每个牢房里都有一个囚犯,每个牢房都是锁着的。 一天晚上,狱卒感到无聊,决定玩一个游戏。在第一轮,他喝了一杯威士忌,然后跑下大厅,打开每个牢房的锁。在第二轮比赛中,他喝了一杯威士忌,然后跑下大厅,锁上每隔一个的牢房的锁(牢房2、4、6....)。在第三轮比赛中,他喝了一杯威士忌,然后跑下大厅。他每隔三个牢房(第3、6、9号牢房)就去一次。如果牢房被锁上了,他就把它打开;如果牢房门打开了,他就锁上牢房。他重复n轮,喝最后一杯,然后昏倒。 一些囚犯(可能为零号)意识到他们的牢房被解锁且狱卒丧失了行动能力。他们就可以立即逃跑。现在根据牢房数量,确定有多少囚犯越狱。
输入描述
第一行输入包含一个正整数t。表示有t行数据,下面每一行都包含一个介于5和100之间(含5和100)的整数,即轮数n。
输出描述:
对于每一行,必须打印出监狱有n个牢房时越狱的囚犯人数
输入样例
2
5
100
输出样例
2
10
题解
#include<iostream>
#include<bits/stdc++.h>
#define N 110
using namespace std;
int main(){
int n,t,ans=0;
int str[N];
cin>>t;
while(t--){
ans=0;
memset(str,0,sizeof(str));
cin>>n;
for(int i=1;i<=n;i++){
if(i==1){
for(int j=0;j<=n;j++)
str[j]=1;
}
else{
for(int f=i;f<=n;f=f+i){
if(!str[f])
str[f]=1;
else
str[f]=0;
}
}
}
for(int i=1;i<=n;i++){
ans=ans+str[i];
}
cout<<ans<<endl;
}
return 0;
}
第二题
题目描述
已知字符串str,str表示邮箱的不标准格式。 其中”.”会被记录成”dot”,”@”记录成”at”。 写一个程序将str转化成可用的邮箱格式。(可用格式中字符串中除了开头结尾所有”dot”,都会被转换,”at”只会被转化一次,开头结尾的不转化)
输入描述:
输入字符串str.(1<=strlen(str)<=1000)
输出描述:
输出转化后的格式。
输入样例
mxyatoxcoderdotcom
输出样例
mxy@oxcoder.com
题解
#include<iostream>
#include<string>
using namespace std;
int main(){
string str,s,arr;
int n,t=0;
cin>>str;
n=str.size();
s=str[0];
for(int i=1;i<n;i++){
if(str[i]=='d'&&str[i+1]=='o'&&str[i+2]=='t'&&i+2<n-1){
s=s+".";
i=i+2;
}
else
s=s+str[i];
}
n=s.size();
arr=s[0];
for(int i=1;i<n;i++){
if(!t&&s[i]=='a'&&s[i+1]=='t'&&i+1<n-1){
t=1;
arr=arr+"@";
i=i+1;
}
else
arr=arr+s[i];
}
cout<<arr;
return 0;
}
第三题
题目描述
给一个单向链表,若其中包含环,请完善EntryNodeOfLoop方法找出该链表的环的入口结点,否则,输出null。要求空间复杂度为O(1) public class ListNode { //链表的数据结构 int val; ListNode next = null; } public ListNode EntryNodeOfLoop(ListNode pHead) { }
输入描述:
输入整数n.(1<=n<=100)表示链表的关系数。 一下n行每行两个整数a,b表示存在一条由a指向b的链表。
输出描述:
如果存在循环输出入口编号。如果存在多个循环,对入口排序后分多行输出。 如果不存在输出NULL
输入样例
4
1 2
2 3
3 4
4 2
输出样例
2
题解
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
set<int> s;
bool m[105];
int cnt[105] = {0};
int main() {
int n;
std::cin>>n;
int a, b;
for (int i = 0; i < n; i++) {
cin>>a>>b;
m[a] = true;
cnt[b]++;
if (m[b] || cnt[b] >= 2) s.insert(b);
}
if (s.size()) {
for(auto x : s) cout<<x<<endl;
}
else{
cout<<"null"<<endl;
}
return 0;
}
这三道题整体来说不算太难。