珠宝店
- scanf %s 和 gets()混和使用
- 纯用scanf %s 也可
- 使用二维数组(数组开大,所以内存会占用的比较大)
- 巧妙输出(也能AC,但是个人感觉好像不太符合题目要求)
1.题目
题目链接
题号:NC14347
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
题目描述
小Z向女神告白成功,成功脱单,为了庆祝,小Z决定送女神一个礼物。
在珠宝店,小Z终于发现一种既便宜又大气的手链。
手链的价格是看手链上的宝石决定的,每一种宝石的价值不一样。
具体规则如下:
宝石A的价值是1、宝石B的价值是2、宝石C的价值是3·····宝石Z的价值是26。
为了防止被销售员虚报价格,小Z决定请你帮忙计算一下手链的价值。
输入描述:
本题有T组数据。
对于每组数据只有一行。
1≤T≤20 1≤手链长度≤100000
输出描述:
输出结果,并换行.
示例1
输入
2
ABCD
LOVELOVE
输出
10
108
2.分析
将字符串读入,依次分析即可。
3.代码
scanf %s 和 gets()混和使用
注意用getchar()消去’\n’的干扰!!
千万不要用scanf(“%s\n”,str)这种写法!!!
int main()
{
int i,T;
int Value[25]={0}; //珠宝价值初始化为0
scanf("%d",&T);
getchar(); //注意吞掉\n 防止影响下一步输入字符串
for(i=0;i<T;i++) //T组测试
{
char Jewel[100005];
gets(Jewel);
int j=0;
while(Jewel[j]!='\0')
{
Value[i]+=(Jewel[j]-'A'+1);
j++;
}
}
for(i=0;i<T;i++)
printf("%d\n",Value[i]);
return 0;
}
纯用scanf %s 也可
使用二维数组(数组开大,所以内存会占用的比较大)
int main()
{
char Jewel[21][100001]={0}; //初始化
int Sum[21]={0};
int T;
int i;
scanf("%d",&T); //组数
for(i=0;i<T;i++)
{
scanf("%s",Jewel[i]);
int j=0;
while(Jewel[i][j]!='\0')
{
Sum[i]+=(Jewel[i][j]-'A'+1);
j++;
}
}
for(i=0;i<T;i++)
{
if(i==T-1)
printf("%d",Sum[i]);
else
printf("%d\n",Sum[i]);
}
return 0;
}
巧妙输出(也能AC,但是个人感觉好像不太符合题目要求)
int main()
{
char Jewel[21][100001]={0}; //初始化
int Sum[21]={0};
int T;
int i;
scanf("%d",&T); //组数
while(T--)
{
scanf("%s",Jewel[i]);
int j=0;
while(Jewel[i][j]!='\0')
{
Sum[i]+=(Jewel[i][j]-'A'+1);
j++;
}
printf("%d\n",Sum[i]);
i++;
}
return 0;
}
4.总结
函数的使用和返回要弄清楚,错误的使用会带来未知的结果
5.更新日志
2022.4.2 整理
欢迎交流、讨论、指正~
不理解之处欢迎评论留言~