cpp
#include<bits/stdc++.h>
using namespace std;
int main()
{
char a[100] = {'\0'};
cin.getline(a,100);
int lc = 0;
int cnt[100] = {0};
int n = strlen(a);
char c[100][100] = {'\0'};
for(int i = 0;i<n;i++)
{
for(int j = i;j<n;j++)
{
char b[100] = {'\0'};
for(int k = i;k<=j;k++)
{
b[k-i] = a[k];
}
bool f = false;
for(int k = 0;k<lc;k++)
{
bool t = true;
for(int h = 0;h<100;h++)
{
if(c[k][h]!=b[h])
{
t = false;
break;
}
}
if(t==true)
{
f = true;
cnt[k]++;
break;
}
}
if(f==false)
{
for(int k = 0;k<100;k++)
{
c[lc][k] = b[k];
}
cnt[lc] = 1;
lc++;
}
}
}
for(int i = 0;i<lc-1;i++)//排序
{
for(int j = 0;j<lc-i-1;j++)
{
bool f = true;
for(int k = 0;k<100;k++)
{
if(c[j][k]>c[j+1][k])
{
f = false;
break;
}
}
if(f==false)
{
char t[100] = {'\0'};
for(int k = 0;k<100;k++)
{
t[k] = c[j][k];
c[j][k] =c[j+1][k];
c[j+1][k] = t[k];
}
int tt = cnt[j];
cnt[j] = cnt[j+1];
cnt[j+1] = tt;
}
}
}
for(int i = 0;i<lc;i++)
{
if(cnt[i]>1)
{
int j = 0;
while(c[i][j]!='\0'&&c[i][j]!=' ')
{
cout<<c[i][j];
j++;
}
cout<<" "<<cnt[i]<<endl;
}
}
return 0;
}
#6146. 流感传染
题目描述
有一批易感人群住在网格状的宿舍区内,宿舍区为n*n的矩阵,每个格点为一个房间,房间里可能住人,也可能空着。
在第一天,有些房间里的人得了流感,以后每天,得流感的人会使其邻居传染上流感,(已经得病的不变),空房间不会传染。
请输出第m天得流感的人数。
输入格式
第一行一个数字n,n不超过100,表示有n*n的宿舍房间。
接下来的n行,每行n个字符,'.'表示第一天该房间住着健康的人,'#'表示该房间空着,'@'表示第一天该房间住着得流感的人。
接下来的一行是一个整数m,m不超过100。
输出格式
输出第m天,得流感的人数。
样例
样例输入
复制5
....#
.#.@.
.#@..
#....
.....
4
样例输出
复制16
cpp
#include <bits/stdc++.h>
using namespace std;
int n;
int sum = 0;
char a[100][100];
void aaa(int,int);
int main()
{
cin>>n;
for(int i = 0;i<n;i++)
{
for(int j = 0;j<n;j++)
{
cin>>a[i][j];
if(a[i][j]=='@')
{
sum++;
}
}
}
int m;
cin>>m;
for(int k = 1;k<m;k++)
{
for(int i = 0;i<n;i++)
{
for(int j = 0;j<n;j++)
{
aaa(i,j);
}
}
for(int i = 0;i<n;i++)
{
for(int j = 0;j<n;j++)
{
if(a[i][j]=='!')
{
sum++;
a[i][j] = '@';
}
}
}
}
cout<<sum;
return 0;
}
void aaa(int i,int j)
{
if(a[i][j]=='@')
{
if(a[i+1][j]=='.') a[i+1][j] = '!';
if(a[i-1][j]=='.') a[i-1][j] = '!';
if(a[i][j+1]=='.') a[i][j+1] = '!';
if(a[i][j-1]=='.') a[i][j-1] = '!';
}
}
#4194. 吃糖果2
题目描述
现有n(50 > n > 0)个糖果,每天只能吃2个或者3个,请计算共有多少种不同的吃法吃完糖果。
输入格式
输入的每一行包括一组测试数据,即为糖果数n。最后一行为0,表示测试结束。
输出格式
每一行输出对应一行输入的结果,即为吃法的数目。
样例
样例输入
复制1
2
3
4
12
0
样例输出
复制0
1
1
1
12
cpp
#include <bits/stdc++.h>
using namespace std;
int aaa(int);
int main()
{
int a[1000];
int n = 0;
while(true)
{
int t;
cin>>t;
if(t==0) break;
a[n] = t;
n++;
}
for(int i = 0;i<n;i++)
{
cout<<aaa(a[i])<<endl;
}
return 0;
}
int aaa(int n)
{
if(n==1||n==2||n==3||n==4) return 1;
return aaa(n-2)+aaa(n-3);
}
#1007. 波兰表达式
题目描述
波兰表达式是一种把运算符前置的算术表达式,例如普通的表达式2 + 3的波兰表示法为+ 2 3。
波兰表达式的优点是运算符之间不必有优先级关系,也不必用括号改变运算次序,例如(2 + 3) * 4的波兰表示法为* + 2 3 4。
本题求解波兰表达式的值,其中运算符包括+ - * /四个。
输入格式
输入为一行,其中运算符和运算数之间都用空格分隔,运算数是浮点数。
输出格式
输出为一行,表达式的值。
可直接用printf("%f\n", v)输出表达式的值v。
样例
样例输入
复制* + 11.0 12.0 + 24.0 35.0
样例输出
复制1357.000000
数据范围与提示
提示 可使用atof(str)把字符串转换为一个double类型的浮点数。atof定义在math.h中。 此题可使用函数递归调用的方法求解。 来源 计算概论05
cpp
#include <bits/stdc++.h>
#include <string.h>
#include <iostream>
#include <string>
#include <iomanip>
#include <math.h>
using namespace std;
double aaa();
int main()
{
cout<<fixed<<setprecision(6)<<aaa();
return 0;
}
double aaa()
{
string s;
cin>>s;
if(s=="+") return aaa()+aaa();
else if(s=="-") return aaa()-aaa();
else if(s=="*") return aaa()*aaa();
else if(s=="/") return aaa()/aaa();
else return atof(s.c_str());
}
#5063. Minecraft
题目描述
Minecraft 是一个几乎无所不能的沙盒游戏,玩家可以利用游戏内的各种资源进行创造,搭建自己的世界。
在 Minecraft 中,基本的建筑元素是边长为 1 个单位的立方体,Tony 想用 N 个这种小立方体搭建一个长方体,并用他珍藏已久的贴纸对其进行装饰。
如果一张贴纸可以贴满小立方体的一个面。那么,他需要用掉多少张贴纸呢?
输入格式
一个整数 N,表示小明所拥有的小立方体的个数。N 不会超过 1000。
输出格式
一个整数,即小明最少用掉的贴纸有多少张。
样例
样例输入
复制9
样例输出
复制30
cpp
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
int mi = 99999;
int h,l;
for(int i = 1;i<=n/3;i++)
{
for(int j = i;j<=n/3;j++)
{
if(n%(i*j)==0)
{
h = n/(i*j);
l = i*j*2+i*h*2+j*h*2;
if(l<mi) mi = l;
}
}
}
cout<<mi;
return 0;
}
#4193. 因子问题
题目描述
任给两个正整数N、M,求一个最小的正整数a,使得a和(M-a)都是N的因子。
输入格式
包括两个整数N、M。N不超过1,000,000。
输出格式
输出一个整数a,表示结果。如果某个案例中满足条件的正整数不存在,则在对应行输出-1
样例
样例输入
复制35 10
样例输出
复制5
cpp
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,m;
cin>>n>>m;
for(int i = 1;i<m;i++)
{
if(n%i==0&&n%(m-i)==0)
{
cout<<i;
return 0;
}
}
cout<<-1;
return 0;
}
#4300. 「2023.09 三级」谁是你的潜在朋友
题目描述
"臭味相投"------这是我们描述朋友时喜欢用的词汇。两个人是朋友通常意味着他们存在着许多共同的兴趣。然而作为一个宅男,你发现自己与他人相互了解的机会并不太多。幸运的是,你意外得到了一份北大图书馆的图书借阅记录,于是你挑灯熬夜地编程,想从中发现潜在的朋友。 首先你对借阅记录进行了一番整理,把N个读者依次编号为1,2,...,N,把M本书依次编号为1,2,...,M。同时,按照"臭味相投"的原则,和你喜欢读同一本书的人,就是你的潜在朋友。你现在的任务是从这份借阅记录中计算出每个人有几个潜在朋友。
输入格式
第一行两个整数N,M,2 <= N ,M<= 200。接下来有N行,第i(i = 1,2,...,N)行每一行有一个数,表示读者i-1最喜欢的图书的编号P(1<=P<=M)
输出格式
包括N行,每行一个数,第i行的数表示读者i有几个潜在朋友。如果i和任何人都没有共同喜欢的书,则输出"BeiJu"(即悲剧,^ ^)
样例
样例输入
复制4 5
2
3
2
1
样例输出
复制1
BeiJu
1
BeiJu
cpp
#include <bits/stdc++.h>
using namespace std;
int a[10000] = {0};
int c[10000];
int main()
{
int n,m;
cin>>n>>m;
for(int i = 0;i<n;i++)
{
cin>>c[i];
a[c[i]]++;
}
cout<<endl;
for(int i = 0;i<n;i++)
{
if(a[c[i]] >1) cout<<a[c[i]]-1<<endl;
else cout<<"BeiJu"<<endl;
}
return 0;
}
#4173. 课程冲突
题目描述
小 A 修了 n 门课程, 第 i 门课程是从第 ai 天一直上到第 bi 天。
定义两门课程的冲突程度为 : 有几天是这两门课程都要上的。
例如 a1=1,b1=3,a2=2,b2=4 时, 这两门课的冲突程度为 2。
现在你需要求的是这 n 门课中冲突程度最大的两门课的冲突程度。
输入格式
第一行一个正整数 n 表示课程数量。 接下来 n 行,每行两个正整数 ai,bi。 2 ≤ n≤ 1000, 1 ≤ ai ≤ bi ≤ 1000。
输出格式
输出一个整数表示最大的冲突程度。
样例
样例输入
复制3
1 3
2 4
5 5
样例输出
复制2
cpp
#include <bits/stdc++.h>
using namespace std;
int a[100];
int b[100];
int main()
{
int n;
cin>>n;
for(int i = 0;i<n;i++)
{
cin>>a[i];
cin>>b[i];
}
int ma = -99999;
for(int i = 0;i<n-1;i++)
{
for(int j = i+1;j<n;j++)
{
int s = min(b[i],b[j])-max(a[i],a[j])+1;
ma = max(ma,s);
}
}
cout<<ma;
return 0;
}
#5064. 踩方格
题目描述
有一个方格矩阵,矩阵边界在无穷远处。我们做如下假设:
a、每走一步时,只能从当前方格移动一格,走到某个相邻的方格上;
b、走过的格子立即塌陷无法再走第二次;
c、只能向北、东、西三个方向走;
请问:如果允许在方格矩阵上走n步,共有多少种不同的方案。2种走法只要有一步不一样,即被认为是不同的方案。
输入格式
允许在方格上行走的步数n(n≤20)。
输出格式
计算出的方案数量。
样例
样例输入
复制2
样例输出
复制7
cpp
#include <bits/stdc++.h>
using namespace std;
int aaa(int);
int main()
{
int n;
cin>>n;
cout<<aaa(n);
return 0;
}
int aaa(int n)
{
if(n==1) return 3;
if(n==2) return 7;
return aaa(n-1)*2+aaa(n-2);
}