当前位置: 代码迷 >> 综合 >> 2022-3-8
  详细解决方案

2022-3-8

热度:77   发布时间:2023-11-29 21:38:46.0

第几个幸运数字

题目描述

到 X 星球旅行的游客都被发给一个整数,作为游客编号。

X 星的国王有个怪癖,他只喜欢数字 3,5 和 7。

国王规定,游客的编号如果只含有因子:3,5,7,就可以获得一份奖品。

我们来看前 10 个幸运数字是:

3 5 7 9 15 21 25 27 35 45

因而第 11 个幸运数字是: 49

小明领到了一个幸运数字 59084709587505,他去领奖的时候,人家要求他准确地说出这是第几个幸运数字,否则领不到奖品。

请你帮小明计算一下,59084709587505 是第几个幸运数字。

不能直接暴力搜,太慢了,经过观察,数列总是3的倍数,5的倍数,7的倍数...这样排的

#include<iostream>
using namespace std;//第几个幸运数字
typedef long long ll;
int main()
{ll ans=0,n=59084709587505;for(ll i=1;i<=n;i*=3){for(ll j=1;i*j<=n;j*=5){for(ll k=1;i*j*k<=n;k*=7){ans++;}}} cout<<ans-1<<endl;//减去1*1*1return 0;
}

猜字母(Python)

题目描述

把 abcd...s 共19个字母组成的序列重复拼接 106 次,得到长度为 2014 的串。

接下来删除第 1 个字母(即开头的字母 a),以及第 3 个,第 5 个等所有奇数位置的字母。

得到的新串再进行删除奇数位置字母的动作。如此下去,最后只剩下一个字母,请输出该字母 q

如果用string,存不下2014位,而Python可以"无限大"

str = 'ancdefghijklmnopqrs'*106
while(len(str)>1):str=str[1::2]
print(str)

距离和

题目描述

两个字母之间的距离定义为它们在字母表中位置的距离。例如 A 和 C 的距离为 2,L 和 Q 的距离为 5。

对于一个字符串,我们称字符串中两两字符之间的距离之和为字符串的内部距离。

例如:ZOO 的内部距离为 22,其中 Z 和 O 的距离为 11。

请问,LANQIAO 的内部距离是多少?162

这道题我发现,string类型必须使用双引号!!!

#include <iostream>
using namespace std;//距离和
#include <algorithm>
int main()
{string s="LANQIAO";//必须用双引号!int ans=0;for(int i=0;i<s.length()-1;i++){for(int j=i+1;j<s.length();j++){ans=ans+abs((int)(s[i]-s[j]));}}cout<<ans<<endl;return 0;
}

算式900

题目描述

小明的作业本上有道思考题:

看下面的算式:

  (□□□□-□□□□)*□□=900

其中的小方块代表 0 ~ 9 的数字,这 10 个方块刚好包含了 0 ~ 9 中的所有数字。 注意:0 不能作为某个数字的首位。

小明经过几天的努力,终于做出了答案!如下:

(5012-4987)*36=900

用计算机搜索后,发现还有另外一个解,本题的任务就是:请你算出这另外的一个解。

注意:输出格式需要与示例严格一致; 括号及运算符号不要用中文输入法; 整个算式中不能包含空格。 暴力枚举(稍微等一会才能出结果)

#include <iostream>
using namespace std;//算式900
bool check(int a[10]){for(int i=0;i<9;i++){for(int j=i+1;j<10;j++){if(a[i]==a[j])return false;}}return true;
}
int main()
{for(int i=1234;i<=9876;i++){for(int j=1234;j<=9876;j++){for(int k=12;k<=98;k++){int a[10];a[0]=i/1000;a[1]=i/100%10;a[2]=i/10%10;a[3]=i%10;a[4]=j/1000;a[5]=j/100%10;a[6]=j/10%10;a[7]=j%10;a[8]=k/10;a[9]=k%10;if((i-j)*k==900&&check(a)){cout<<i<<" "<<j<<" "<<k;cout<<endl;}}}}return 0;
}

序列个数

题目描述

请问有多少个序列满足下面的条件:

  1. 序列的长度为 5。
  2. 序列中的每个数都是 1 到 10 之间的整数。(可以等于10)
  3. 序列中后面的数大于等于前面的数。
#include <iostream>
using namespace std;//序列个数
int main()
{int ans=0;for(int a=1;a<=10;a++){for(int b=a;b<=10;b++){for(int c=b;c<=10;c++){for(int d=c;d<=10;d++){for(int e=d;e<=10;e++){ans++;}}}}} cout<<ans;return 0;
}