趣谈蓝桥杯测试案例——数的读法 and 芯片测试

这两天在做蓝桥杯的基础练习时发现有几道题真的挺难的,一个是数的读法,要考虑的情况真的很多,一个是芯片测试,题意简洁,看完人就很迷了,觉得无从下手。
先说说数的读法,这题之前可能是见过类似的,所以动手写了小一个小时,最后试着试着就发现太复杂了,然后就去网上搜了下,在csdn上发现一个特简洁的代码,一测果然AC了,想着又是那位大牛写的,短短20几行代码就过了,仔细一读代码发现有些不对呀,果然,拿着题目里的两个数据,10010和10000试了下结果都不对。
在这里插入图片描述

//参考博客https://blog.csdn.net/JYL1159131237/article/details/78631962的代码
#include<stdio.h>
#include<string.h>
int main()
{
    char a[100];
    int i,j,l;
    char b[20][10]= {"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
    char c[20][10]= {"","","shi","bai","qian","wan","shi","bai","qian","yi","shi"};
    gets(a);
    l=strlen(a);
    for(i=0; i<l; i++)
    {
        j=a[i]-'0';
        if(j==0)
        {
            if(i<l-1)
                if(a[i+1]!='0')//下一位不为0
                    printf("%s ",b[j]);
        }
        else if((l-i==2||l-i==6||l-i==10)&&j==1)//shi
            printf("%s ",c[l-i]);
        else if(a[i-1]=='0'&&j==1)
            printf("%s ",c[l-i]);
        else
            printf("%s %s ",b[j],c[l-i]);
    }
    printf("\n");
    return 0;
}

在这里插入图片描述
在这里插入图片描述
是的,就题目中给的2个数都不对,但是最后提交上去AC了 ̄□ ̄||
本着瞎折腾的精神,把代码修改了下(经评论区指正,下述代码修正了输入0时返回空的问题,但仍存在输入1000000时输出错误的问题),试了下上面2个都是对的,提交上去也AC了

using namespace std;
#include<bits/stdc++.h>
int main()
{
    char a[100];
    int i,j,l;
    char b[20][10]= {"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
    char c[20][10]= {"","","shi","bai","qian","wan","shi","bai","qian","yi","shi"};
    gets(a);
    l=strlen(a);
    if(a[0] == '0' && l==1) printf("%s",b[0]);
    for(i=0; i<l; i++)
    {
        j=a[i]-'0';
        if(j==0)
        {
            if(i<l-1)
                if(a[i+1]!='0')//下一位不为0
                    printf("%s ",b[j]);
        }
        else if((l-i==2||l-i==6||l-i==10) && j==1 && a[i+1]!='0' && i==0)//shi
            printf("%s ",c[l-i]);
        else if((l-i==2||l-i==6||l-i==10) && j==1 && a[i+1]=='0' && i==0)//shi + 
        	printf("%s %s",c[l-i],c[l-i-1]);
		else
            printf("%s %s ",b[j],c[l-i]);
    }
    printf("\n");
    return 0;
}

问题主要出在2个地方,一个是10到底读shi 还是yi shi,仔细思考发现,只有100000,10,1000000000,这种以10开头的才读shi 其他前面有数字的都读yi shi 比如10010,210,22101210这种;另一个就是原代码里面对100000这种数字只输出了shi 却没有输位权,在符合输出shi的情况只有在当前位为1,下一位不为0是才能直接输shi , 否则的话一定要输出shi + 位权。

无独有偶,另一个芯片测试也是这样,读完题觉得没找到规律啥的,就先自己瞎试了下,既然好芯片测结果是正确的,那么如果i测j是1,j测i也是1的话不就说明i和j都是好的嘛(实际上这逻辑一点都不通,╮(╯▽╰)╭
在这里插入图片描述

using namespace std;
#include<bits/stdc++.h>
int main(){
	int n,i,j;
	int mp[25][25];
	cin>>n;
	for(i=1;i<=n;i++)
	{
		for(j=1;j<=n;j++)
		{
			cin>>mp[i][j];
		}
	}
	bool flag[25]={0};
	//60
	for(i=1;i<=n-1;i++)
	{
		for(j=i+1;j<=n;j++)
		{
			if(mp[i][j] == 1 && mp[j][i] == 1)
			{
				flag[i]=1;
				flag[j]=1;
				break;
			}
		}
	}
	for(i=1;i<=n;i++)
	{
		if(flag[i]) cout<<i<<" ";
	}
	return 0;
}

最后提交上去居然还有60分O(∩_∩)O哈哈~,这告诉我们不会的题目瞎试试也能拿分呢,不能轻易放弃
最后上网一搜发现真的有人和我同一情况呢,参考博客

https://blog.csdn.net/chensanwa/article/details/75388827

这位博主也是很有趣呢,看完测试案例后发现只要根据最后一行是不是1就可以直接输出了,果断地去试了下发现居然是真的,蓝桥杯这测试案例真的是太有趣了hhh

严肃起来,仔细看了下,博主后面也写了正常的解题思路,在题目中已经说明好的芯片比坏的多,那只要对j列来说,若j列内的1比0多不就说明j号芯片是好的嘛
直接上代码

using namespace std;
#include<bits/stdc++.h>
int main(){
	int n,i,j;
	int mp[25][25];
	cin>>n;
	for(i=1;i<=n;i++)
	{
		for(j=1;j<=n;j++)
		{
			cin>>mp[i][j];
		}
	}
	bool flag[25]={0};
	//60
//	for(i=1;i<=n-1;i++)
//	{
//		for(j=i+1;j<=n;j++)
//		{
//			if(mp[i][j] == 1 && mp[j][i] == 1)
//			{
//				flag[i]=1;
//				flag[j]=1;
//				break;
//			}
//		}
//	}
	//100 钻漏洞 
//	for(i=1;i<=n;i++)
//	{
//		if(mp[n][i] == 1) flag[i]=1;
//	}
	//100 正经点 
	for(i=1;i<=n;i++)
	{
		int cnt=0;
		for(j=1;j<=n;j++)
		{
			if(mp[j][i] == 1) cnt++;
		}
		if(cnt>n/2) flag[i]=1;
	}
	for(i=1;i<=n;i++)
	{
		if(flag[i]) cout<<i<<" ";
	}
	return 0;
	


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值