第 12.3~12.14 大周博客

继上次的牛与问题,特此再做总结。

复述一下问题(还是简化版):

牛发明了一种语言,英文单词开头是元音字母的直接在后面加“cow”,不是的把最前面的单词移到最后再加“ow;

经过大神的指导之后,终于开窍的我写出了以下代码:

 

 

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int a;
	string b;
    cin>>a;
    for(int i=1;i<=a;i++)
    {
    	cin>>b;
    	if(b[0]=='a'||b[0]=='e'||b[0]=='i'||b[0]=='o'||b[0]=='u') 
		{
			cout<<b<<"cow"<<endl;
		}
    	else 
    	{
    		for(int j=1;j<b.size();j++)
        	{
    		    cout<<b[j];
        	}
        	cout<<b[0]<<"ow"<<endl;
    	}
    }
    return 0;
}  

 

 

 

对于本代码的理解如下图;

 

 

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int a;
	string b;//定义字符串; 
    cin>>a;
    for(int i=1;i<=a;i++)
    {
    	cin>>b;//输入A个字符串; 
    	if(b[0]=='a'||b[0]=='e'||b[0]=='i'||b[0]=='o'||b[0]=='u')//b[0]是字符串第一个字母; 
		{
			cout<<b<<"cow"<<endl;//开头是元音,即在结尾直接加“COW”; 
		}
    	else 
    	{
    		for(int j=1;j<b.size();j++)//输出字符串中除第一个外的各个字母; 
        	{
    		    cout<<b[j];
        	}
        	cout<<b[0]<<"ow"<<endl;//把第一个字母放到末尾,并在最后加“OW”; 
    	}
    }
    return 0;
}

 

 

 

对于恐怖服装这一题,鄙人做出了以下改动:

 

 

#include<bits/stdc++.h>
using namespace std;
int main()
{
	long long n,s,a[1001000],ans=0;
	cin>>n>>s;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];//输入每头牛的长度; 
	}
	for(int j=1;j<=n;j++)
	{
		for(int k=j+1;k<=n;k++)//声明:这里的意思是K每次都是代表第J头牛后面的牛,避免了自己和自己,也避免了重复; 
		{
			if(a[j]+a[k]<=s)//长度不大于服装长度,可选择的选法+1; 
			{
				ans++;
			}
		}
	}
	cout<<ans<<endl;
	return 0;
}

 

 

 

对于重复这一点,鄙人是看到一组数据后才想到的,源代码+原思想如下:

 

 

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int n,s,a[10000],ans=0;
	cin>>n>>s;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
	}
	for(int j=1;j<=n;j++) 
	{
		for(int k=1;k<=n;k++)
		{
			if(a[j]+a[k]<=s&&a[j]!=a[k])//这时,每种选法都被重复选中两次,所以后面ANS要除以2; 
			{
				ans++;
			}
		}
	}
	cout<<ans/2<<endl;
	return 0;
}

 

 

 

该代码有以下几点问题:

 

 

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int n,s,a[10000],ans=0;//数组开的太小; 
	cin>>n>>s;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
	}
	for(int j=1;j<=n;j++) 
	{
		for(int k=1;k<=n;k++)
		{
			if(a[j]+a[k]<=s&&a[j]!=a[k])//假设一种特殊情况:当第J头牛和第K头牛长度相等时,K也不等于J,就少了一次; 
			{
				ans++;
			}
		}
	}
	cout<<ans/2<<endl;
	return 0;
}

又臭又长。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值