你的脑容量(2018.10.5)
题目传送门
Description
intint占用4个字节,boolbool占用1个字节,long longlonglong占用88个字节,doubledouble占用8个字节,charchar占用1个字节,floatfloat占用4个字节。
这是哪个世界线的咒语吗?
计算机中各种存储容量的单位都是用字节(ByteByte简为BB)来表示,此外还有KBKB(千字节)、MBMB(兆字节)、GBGB(千兆字节)和TBTB(太字节),他们的关系是
1KB=1024Bytes=210 Byte
1MB=1024KB=220Byte
1GB1024MB=230Byte
1TB1024GB=240Bytes…
请你写一个程序,求nn个这六种类型的变量,求出这些变量理论上需要使用多少KBKB(千字节)的内存,答案向上取整。
Input
第一行一个整数T,代表有T组样例
对于每组样例第一行n标识输入有n行 (n<=100000)(n<=100000)
接下n行如上述所示
输入保证1:每一行只有一个类型名和变量名
存在:int a;而不存在:int a,b
2:输入的基本格式为:<变量类型> <变量名>
3:n的和不超过200000
Output
输出用了多少KBKB(千字节)内存(向上取整)
Sample Input 1
1
1
int a
Sample Output 1
1
这个题只要把题意弄懂了就非常容易想到思路,这六种类型的变量中,每种类型变量对应 的字节是一样的,所以,我们不必理会变量名是什么,只要对输入类型的变量的字节数累加就可以了。
#include<stdio.h>
#include<string.h>
int main()
{
int T,n,ans;
char b[100],a[10000];
while(scanf("%d",&T)!=EOF)
{
while(T--)
{
ans=0;
scanf("%d",&n);
getchar();
while(n--)
{
scanf("%s%s",b,a);
if(b[0]=='i'||b[0]=='f')ans+=4;
else if (b[0]=='b'||b[0]=='c')ans+=1;
else (b[0]=='l'||b[0]=='d');ans+=8;
}
printf("%d\n",(ans+1023)/1024);
}
}
return 0;
}
刚开始由于忘了加吸收换行符的getchar()而WA,加上之后,又忽略了scanf()不能接受空格再次WA,多次WA之后才找到关键点,只能怪自己c语言语法掌握的还是不牢固。