题目描述:
用小于等于n元去买100只鸡,大鸡5元/只,小鸡3元/只,还有1/3元每只的一种小鸡,分别记为x只,y只,z只。编程求解x,y,z所有可能解。
输入:
测试数据有多组,输入n。
输出:
对于每组输入,请输出x,y,z所有可行解,按照x,y,z依次增大的顺序输出。
样例:
输入:
40
输出:
x=0,y=0,z=100
x=0,y=1,z=99
x=0,y=2,z=98
x=1,y=0,z=99
思考:
刚开始我想了一种方法
#include<iostream>
#include<string>
using namespace std;
int main()
{
int n;
while(cin>>n)
{
for(int i=0;i<=100;i++)
{
for(int j=0;j<=100;j++)
{
for(int k=0;k<=100;k++)
{
if(i*5*3+j*3*3+k<=n*3&&i+j+k==100)
{
cout<<"x="<<i<<",y="<<j<<",z="<<k<<endl;
}
}
}
}
}
return 0;
}
但是因为无用循环过多,最后导致时间超限。
———————————————————————————————————————————
==去掉一些无用循环==
#include<iostream>
#include<string>
using namespace std;
int main()
{
int n;
while(cin>>n)
{
for(int i=0;i<=100;i++)
{
for(int j=0;j<=100-i;j++)
{
int k;
k=100-i-j;
if(i*5*3+j*3*3+k<=n*3)
{
cout<<"x="<<i<<",y="<<j<<",z="<<k<<endl;
}
}
}
}
return 0;
}
提交,依然时间超限。
改成C语言
#include<stdio.h>
int main()
{
int n;
int i,j;
while(scanf("%d",&n)!=EOF)
{
for(i=0;i<=100;i++)
{
for(j=0;j<=100-i;j++)
{
int k;
k=100-i-j;
if(i*5*3+j*3*3+k<=n*3)
{
printf("x=%d,y=%d,z=%d\n",i,j,k);
}
}
}
}
return 0;
}
AC。
看来是因为执行速度的问题,C语言不愧是执行速度仅次于汇编语言的语言。
尾:
C++是完全兼容C的,printf执行起来比cout快一些
#include<iostream>
#include<stdio.h>
#include<string>
using namespace std;
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
for(int i=0;i<=100;i++)
{
for(int j=0;j<=100-i;j++)
{
int k;
k=100-i-j;
if(i*5*3+j*3*3+k<=n*3)
{
printf("x=%d,y=%d,z=%d\n",i,j,k);
}
}
}
}
return 0;
}
———————————————————————————————————————————
2021.11.3
更新:
c++输入输出流加速器
NOIP比赛中如何加速c++的输入输出 - birchtree - 博客园 (cnblogs.com)https://www.cnblogs.com/birchtree/p/9845856.html