小鱼鸡汤时刻:点墨(老爸)曰:养精蓄锐,厚积薄发。
墨点儿(我)曰:老爸说的对哈哈!
1.隔行变色
Excel表的格子很多,为了避免把某行的数据和相邻行混淆,可以采用隔行变色的样式。
小明设计的样式为:第1行蓝色,第2行白色,第3行蓝色,第4行白色,....
现在小明想知道,从第21行到第50行一共包含了多少个蓝色的行。请你直接提交这个整数,千万不要填写任何多余的内容。
答案:15
2.立方尾不变(初步定范围)
有些数字的立方的末尾正好是该数字本身。
比如:1,4,5,6,9,24,25,....请你计算一下,在10000以内的数字中(指该数字,并非它立方后的数值),符合这个特征的正整数一共有多少个。
请提交该整数,不要填写任何多余的内容。
答案:36
#include<iostream>
#include<cmath>
#define ll long long
using namespace std;
int main() {
int ans=0;
for(ll i=1; i<=10000; i++) {
ll tmp=i*i*i;
if(tmp%10000==i||tmp%1000==i||tmp%100==i||tmp%10==i||tmp==i) {
ans++;
cout<<i<<endl;
}
}
cout<<ans;
return 0;
}
以下是zh同学的代码,觉得更条理清晰,赞一个!
#include<iostream>
using namespace std;
int main(){
int sum=0;
for(int i=1;i<=9;i++){
if((i*i*i)%10==i)
sum++;
}
for(int i=10;i<=99;i++){
if((i*i*i)%100==i)
sum++;
}
for(int i=100;i<=999;i++){
if((i*i%1000*i)%1000==i)
sum++;
}
for(int i=1000;i<=9999;i++){
if((i*i%10000*i)%10000==i) //为了避免超出数据范围,需要先mod 一下
sum++;
}
cout<<sum<<endl;
}
3.立方变自身
观察下面的现象,某个数字的立方,按位累加仍然等于自身。
1^3 = 1
8^3 = 512 5+1+2=8
17^3 = 4913 4+9+1+3=17
...请你计算包括1,8,17在内,符合这个性质的正整数一共有多少个?
请填写该数字,不要填写任何多余的内容或说明性的文字。
答案:6
#include<iostream>
#include<cmath>
#define ll long long
using namespace std;
int main() {
int ans=0;
for(int i=1;i<10000;i++){
ll tmp=i*i*i;
int sum=0;
while(tmp){
sum+=tmp%10;
tmp/=10;
}
if(sum==i){
cout<<i<<' '<<i*i*i<<endl;
ans++;
}
}
cout<<ans;
return 0;
}
4.九数分三组(初步确定范围)
1~9的数字可以组成3个3位数,设为:A,B,C, 现在要求满足如下关系:
B = 2 * A
C = 3 * A请你写出A的所有可能答案,数字间用空格分开,数字按升序排列。
注意:只提交A的值,严格按照格式要求输出。
答案:192 219 273 327
#include<iostream>
#include<cstring>
using namespace std;
int v[10];
bool judge(int a,int b,int c){
memset(v,0,sizeof v);
while(a){
v[a%10]++;
a/=10;
}
while(b){
v[b%10]++;
b/=10;
}
while(c){
v[c%10]++;
c/=10;
}
for(int i=1;i<=9;i++)
if(v[i]!=1) return false;
return true;
}
int main() {
int ans=0;
for(int i=111;i<=333;i++){
if(judge(i,i*2,i*3)){
cout<<i<<' '<<i*2<<' '<<i*3<<endl;
ans++;
}
}
cout<<ans;
return 0;
}
5.串逐位和(简单二分,注意含首不含尾)
给定一个由数字组成的字符串,我们希望得到它的各个数位的和。
比如:“368” 的诸位和是:17
这本来很容易,但为了充分发挥计算机多核的优势,小明设计了如下的方案:int f(char s[], int begin, int end)
{
int mid;
if(end-begin==1) return s[begin] - '0';
mid = (end+begin) / 2;
return f(s,begin,mid)+f(s,mid,end); //填空(包括头不包括尾)
}
int main()
{
char s[] = "4725873285783245723";
printf("%d\n",f(s,0,strlen(s)));
return 0;
}你能读懂他的思路吗? 请填写划线部分缺失的代码。
注意:只填写缺少的部分,不要填写已有代码或任何多余内容。
6.无穷分数(老朋友了)
无穷的分数,有时会趋向于固定的数字。
请计算【图1.jpg】所示的无穷分数,要求四舍五入,精确到小数点后5位,小数位不足的补0。
请填写该浮点数,不能填写任何多余的内容。
#include<cstdio>
#include<cmath>
using namespace std;
int main() {
double sum=0;
for(int i=100;i>=1;i--){
sum=(1.0*i)/(i+sum);
printf("%.5f\n",sum);
}
return 0;
}
7.奇妙的数字(解决方法同四题)
小明发现了一个奇妙的数字。它的平方和立方正好把0~9的10个数字每个用且只用了一次。
你能猜出这个数字是多少吗?请填写该数字,不要填写任何多余的内容。
答案:69
#include<iostream>
#include<cstring>
using namespace std;
int v[10];
bool judge(int a,int b){
memset(v,0,sizeof v);
while(a){
v[a%10]++;
a/=10;
}
while(b){
v[b%10]++;
b/=10;
}
for(int i=0;i<=9;i++)
if(v[i]!=1) return false;
return true;
}
int main() {
for(int i=40;i<=100;i++){
if(judge(i*i,i*i*i))
cout<<i<<' '<<i*i<<' '<<i*i*i<<endl;
}
return 0;
}
8.饮料换购(简单模拟)
乐羊羊饮料厂正在举办一次促销优惠活动。乐羊羊C型饮料,凭3个瓶盖可以再换一瓶C型饮料,并且可以一直循环下去(但不允许暂借或赊账)。
请你计算一下,如果小明不浪费瓶盖,尽量地参加活动,那么,对于他初始买入的n瓶饮料,最后他一共能喝到多少瓶饮料。
输入:一个整数n,表示开始购买的饮料数量(0<n<10000)
输出:一个整数,表示实际得到的饮料数例如:
用户输入:
100
程序应该输出:
149用户输入:
101
程序应该输出:
151
资源约定:
峰值内存消耗 < 256M
CPU消耗 < 1000ms
请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
注意: main函数需要返回0
注意: 只使用ANSI C/ANSI C++ 标准,不要调用依赖于编译环境或操作系统的特殊函数。
注意: 所有依赖的函数必须明确地在源文件中 #include <xxx>, 不能通过工程设置而省略常用头文件。提交时,注意选择所期望的编译器类型。
#include<iostream>
#include<cmath>
using namespace std;
int main() {
int n,sum,cur;
cin>>n;
sum=cur=n;
while(cur>=3){
sum+=cur/3;
cur=cur/3+cur%3;
}
cout<<sum;
return 0;
}
9.打印大X(纯找规律题)——极简主义
小明希望用星号拼凑,打印出一个大X,他要求能够控制笔画的宽度和整个字的高度。
为了便于比对空格,所有的空白位置都以句点符来代替。要求输入两个整数m n,表示笔的宽度,X的高度。用空格分开(0<m<n, 3<n<1000, 保证n是奇数)
要求输出一个大X例如,用户输入:
3 9
程序应该输出:
***.....***
.***...***.
..***.***..
...*****...
....***....
...*****...
..***.***..
.***...***.
***.....***(如有对齐问题,参看【图1.jpg】)
再例如,用户输入:
4 21
程序应该输出
****................****
.****..............****.
..****............****..
...****..........****...
....****........****....
.....****......****.....
......****....****......
.......****..****.......
........********........
.........******.........
..........****..........
.........******.........
........********........
.......****..****.......
......****....****......
.....****......****.....
....****........****....
...****..........****...
..****............****..
.****..............****.
****................****(如有对齐问题,参看【图2.jpg】)
资源约定:
峰值内存消耗 < 256M
CPU消耗 < 1000ms
请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
以下为自己发现规律的手稿(字迹略潦草,还请各位小伙伴们凑合看)
#include<iostream>
#include<string>
using namespace std;
string str[1005];
int main() {
int m,n,mid,len;
cin>>m>>n;
mid=n/2;
len=mid*2+m;
string s(len,'.');
string ss(m,'*');
for(int i=0;i<=mid;i++){
str[i]=s;
str[i].replace(i,m,ss);
str[i].replace(len-m -i,m,ss);
}
for(int i=0;i<=mid;i++)
cout<<str[i]<<endl;
for(int i=mid-1;i>=0;i--)
cout<<str[i]<<endl;
return 0;
}
10.灾后重建
Pear市一共有N(<=50000)个居民点,居民点之间有M(<=200000)条双向道路相连。这些居民点两两之间都可以通过双向道路到达。这种情况一直持续到最近,一次严重的地震毁坏了全部M条道路。
震后,Pear打算修复其中一些道路,修理第i条道路需要Pi的时间。不过,Pear并不打算让全部的点连通,而是选择一些标号特殊的点让他们连通。
Pear有Q(<=50000)次询问,每次询问,他会选择所有编号在[l,r]之间,并且 编号 mod K = C 的点,修理一些路使得它们连通。由于所有道路的修理可以同时开工,所以完成修理的时间取决于花费时间最长的一条路,即涉及到的道路中Pi的最大值。你能帮助Pear计算出每次询问时需要花费的最少时间么?这里询问是独立的,也就是上一个询问里的修理计划并没有付诸行动。
【输入格式】
第一行三个正整数N、M、Q,含义如题面所述。
接下来M行,每行三个正整数Xi、Yi、Pi,表示一条连接Xi和Yi的双向道路,修复需要Pi的时间。可能有自环,可能有重边。1<=Pi<=1000000。接下来Q行,每行四个正整数Li、Ri、Ki、Ci,表示这次询问的点是[Li,Ri]区间中所有编号Mod Ki=Ci的点。保证参与询问的点至少有两个。
【输出格式】
输出Q行,每行一个正整数表示对应询问的答案。【样例输入】
7 10 4
1 3 10
2 6 9
4 1 5
3 7 4
3 6 9
1 5 8
2 7 4
3 2 10
1 7 6
7 6 9
1 7 1 0
1 7 3 1
2 5 1 0
3 7 2 1【样例输出】
9
6
8
8【数据范围】
对于20%的数据,N,M,Q<=30
对于40%的数据,N,M,Q<=2000
对于100%的数据,N<=50000,M<=2*10^5,Q<=50000. Pi<=10^6. Li,Ri,Ki均在[1,N]范围内,Ci在[0,对应询问的Ki)范围内。
资源约定:
峰值内存消耗 < 256M
CPU消耗 < 5000ms
请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
注意: main函数需要返回0
注意: 只使用ANSI C/ANSI C++ 标准,不要调用依赖于编译环境或操作系统的特殊函数。
注意: 所有依赖的函数必须明确地在源文件中 #include <xxx>, 不能通过工程设置而省略常用头文件。提交时,注意选择所期望的编译器类型。