目录
1.内存空间
真的要吐了,人都麻了题还没看完,看样子就是要想办法提取出来想要的东西2022第十三届蓝桥杯决赛C/C++大学A组-C题内存空间_蓝桥杯a组c语言题目-CSDN博客
这个是一个非常清晰的代码,好几个帖子都管这个题叫大模拟题,搜了一下大概就是情况很复杂,要慢慢分析,把情况找全了去模拟那种手算的方式,这种就是纯想办法了
从题目来看是分五种情况,由于cin>>string是按行输入的,所以可以自然的就接收一整行了,然后就去里面找=。数字大部分都是在等号后面出现的,如果是数组的话要找[和],如果是字符串的话就是要找" "之间的长度了,分完类之后就可以开始入手了
啊啊啊不得不说这是一个耗费时间的纸老虎啊,思路不难,写起来太浪费时间了,调试了很久
#include <bits/stdc++.h>
using namespace std;
long long stol(string s)
{
long long n,i,ans=0;
n=s.size();
for(i=1;i<n;i++)
{
ans=ans*10+(s[i]-'0');
}
return ans;
}
main()
{
string s,st;
char a;
long long ans=0;
long long t,i,j,k,x;
cin>>t;
for(i=0;i<t;i++)
{
cin>>a;
getline(cin,s);
if(a=='i')
{
for(j=0;j<s.size();j++)
{
if(s[j]=='=' && s[j+1]>='0' && s[j+1]<='9') ans=ans+4;
else if(s[j]=='=' && (s[j+1]<='0' || s[j+1]>='9'))
{
st=' ';
for(k=j;k<s.size();k++)
{
if(s[k]=='[')
{
while(s[k]!=']')
{
st=st+s[k];
k++;
}
}
x=stol(st);
cout<<st<<endl;
cout<<x<<endl;
cout<<ans<<endl;
ans=ans+(8*x);
x=0;
st=' ';
j=k;
}
}
}
}
else if(a=='l')
{
for(j=0;j<s.size();j++)
{
if(s[j]=='=' && s[j+1]>='0' && s[j+1]<='9') ans=ans+8;
else if(s[j]=='=' && (s[j+1]<='0' || s[j+1]>='9'))
{
st=' ';
for(k=j;k<s.size();k++)
{
if(s[k]=='[')
{
k=k+1;
while(s[k]!=']')
{
st=st+s[k];
k++;
}
}
x=stol(st);
cout<<st<<endl;
cout<<x<<endl;
cout<<ans<<endl;
ans=ans+(8*x);
x=0;
st=' ';
j=k;
}
}
}
}
else if(a=='S')
{
cout<<"*********************"<<endl;
for(j=0;j<s.size();j++)
{
if(s[j]=='=')
{
cout<<"//"<<endl;
st=' ';
for(k=j+1;k<s.size();k++)
{
if(s[k]=='"')
{
k=k+1;
while(s[k]!='"')
{
st=st+s[k];
k++;
}
cout<<st<<endl;
}
ans=ans+st.size()-1;
st=' ';
j=k;
}
}
}
}
}
cout<<ans;
}
/*
1
long[] nums=new long[131072];
4
int a=0,b=0;
long x=0,y=0;
String s1="hello",s2="world";
long[] arr1=new long[100000],arr2=new long[100000];
*/