题目描述
你不需要看懂这张图片;但如果你看懂了,会觉得它很有趣。)
JavaScript 是一种功能强大且灵活的编程语言,也是现代 Web 开发的三大支柱之一 (另外两个是 HTML 和 CSS)。灵活的 JavaScript 包含“自动类型转换”的语言特性。例如,JavaScript 认为[]
(空数组)和 0
是可以比较且相等的。自动类型转换带来的一个后果是我们可以只用 ()+[]!
这 6 个字符编写任意功能的 JavaScript 程序,包括游戏和交互网页。
Dr. X 请你帮他为整数 nn 生成一段仅包含 ()+[]!
字符的 JavaScript 代码,且代码的运行结果恰好为整数 nn。解决这个题目不需要任何 JavaScript 语言知识。压缩包中提供了人工智能实现的 jsexplorer.html 小工具,双击打开可以运行 JavaScript 代码并检查运行结果。
jsexplorer.html https://www.luogu.com.cn/fe/api/problem/downloadAttachment/pt517ofu
输入格式
输入一个非负整数 n,为你需要构造的目标数字。
输出格式
输出一行一个 JavaScript 程序,且仅由 ()+[]!
六个字符构成。在 jsexplorer.html 中执行它可以得到整数 n。本题答案不唯一,输出任意不超过 5000 个字符的解即可。
输入输出样例
输入 #1
0
输出 #1
+[]
分析1
这一题的难度很高,很难搞懂,初次试的时候要有耐心
薄主差点崩溃
0的时候要特判
其他的时候就叠加 ++[ ]
然后就写出了这样的程序
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
if(n==0){
cout<<"+[]";
}
else{
for(int i=1;i<=n;i++){
cout<<"+!![]";
}
}
return 0;
}
但是好像不太行(刑)
这样能表示到1000(数据有一点严了,实际考试能拿到%60的分)
分析2
但在我找到了这个网站之后,every things are different.
让后,就写出了这样的代码
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
int a[10];
int t=0;
if(n==0){
cout<<"+[]";
return 0;
}
while(n!=0){
t++;
a[t]=n%10;
n/=10;
}
cout<<"+(";
for(int i=t;i>=1;i--){
cout<<"(";
for(int j=1;j<=a[i];j++){
cout<<"+!+[]";
}
cout<<"+[])";
if(i!=1) cout<<"+";
}
cout<<")";
return 0;
}
AC!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!