19C++循环结构-多重循环(2)

一、三重循环与程序的优化

教学视频

百钱买百鸡

3文钱可以买1只公鸡,2文钱可以买1只母鸡,1文可以买3只小鸡,要用100文买100只(每种鸡必买1只)。
试编一程序,求公鸡,母鸡、小鸡各有多少只?
如果100文钱全部买公鸡,最多可以买儿?33只;如果100文钱全部买母鸡,最多可以买几只?50只;如果100文全部买小鸡,最多可以买几只?300只?不对,鸡一共有100只。所以小鸡最多是100只。可以用枚举法,依次枚举每种鸡的只数,如果同时满足“百钱”“百鸡”两个条件。那么就输出每种鸡相应的只数。
公母+母鸡+小鸡=100只
买公鸡的钱+买母鸡的钱+买小鸡的钱=100文
三重循环执行:33x50x100=165000次
优化简化为双重循环:

#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
  int gongji,muji,xiaoji;
  cout<<setw(5)<<"公鸡"<<setw(5)<<"母鸡"<<setw(5)<<"小鸡"<<endl;
  for(gongji=1;gongji<=33;gongji++)
    for(muji=1;muji<=50;muji++)
    {
      xiaoji=100-gongji-muji;
      if(gongji*3+muji*2+xiaoji/3.0==100)
	    cout<<setw(5)<<gongji<<setw(5)<<muji<<setw(5)<<xiaoji<<endl;
	}
  return 0;
}

练习:

(1)常听说计算机中了“木马”:下面关于“木马”描述正确的是( )
A.是指木头做的马
B.是指计算机中非常隐秘的恶意程序,能直接对计算机产生危害
C.木马病毒是通过特定的木马程序来控另一台计算机
D.如果计算机中了木马,该计算机任何时间都会被木马控制
(2)阅读程序写结果

#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
  int i, j, ans=0;
  i=l;
  while(i<=3)
  {
   for(j=1;j<=5;j++)
    ans+=j;
   i++;
  }
 cout << ans<< endl;
 return 0;
}

i,j,ans输出:________________
(3)完善程序。
有一个三位数,个位数字比百位数字大,而百位数字又比十位数并且各位数字之和等于各位数字相乘之积,求此三位数。

#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
 int ge, shi, bai ans;
 for(shi=1; shi<=7;shi++)
  for(bai=shi+1; bai<=8; bai++)
    for(ge=bai+1; ge<=9; ge++)
     {
       if(______)
       {
        _________;
        cout<<ans<<endl;
        }
       }
 return 0;
}

二、四重循环

教学视频
问题:

#include <iostream> 
using namespace std;
int main()
{
  int a1,a2,a3,a4,n;
  for(a4=0;a4<=1;a4++)
    for(a3=0;a3<=1;a3++)	
      for(a2=0;a2<=1;a2++)
        for(a1=0;a1<=1;a1++)
        {
           n=a4*8+a3*4+a2*2+a1*1;
           cout<<a4<<a3<<a2<<a1<<"B    "<<n<<endl;
        }
  return 0;	
}

练习:

(1)
(2)阅读程序写结果

#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
 int i, j, ans=0;
 i=l;
 while(i<=3)
 {
  j=l;
  do
  {
   ans+=i*i;
   j++;
   }while(j<=5);
  i++;
  }
 cout << ans <<endl;
return 0;
}

i,j,ans输出:________________
(3)完善程序。
狐狸老师又布置了一个新任务,完成后可以获得(100)2元比特童币.任务要求用0,1.2,3,4.5.6.7八个数字组成三位数的奇数,共有多
少个,分别是那几个?

#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
 int b,s,g,shu,count=0;
 for(b=1; b<=7;b++)
   for(s=0;s<=7;___)
     for(g=1;g<=7;g=g+2)
     {
       shu=b*100+s*10+g;
       cout<<shu <<"";
       ______________;
      }
 cout<< endl;
 cout<<"个数:"<<count<<endl;
 return 0;
}

三、超市收费程序

教学视频
比特超市是风之巅小学的同学们用比特童币换购商品的地方,每个月最后一周的周五12:00到12:40开放、由同学们轮流经营。为了能自动算出每位来换购的同学应付的货款,自动算出超市一天的营业额,自动统计一天换购的人数,需要一个简易的超市收费程序。
试编一个超市收费程序,实现上述功能。
超市一天来多少位同学是不确定的,可以用一个结束标志来检查是否一天结束了。每位同学换购的商品种类也不一样,可以在每位同学换购结束时输入一个特殊的数作为结束标志。同时需要设两个累加器,一个累加每位同学应付的贷款,一个累加一天的营业额。设一个计数器,记录换购的人数。
n为每个物品的价格,用素加器sumone累加一位同学应付的货款,用累加器sum累加一天的营业额,用计数器num统计一天换吻的人数。当输入0时为一个人结束,当输入-1时为一天结束。流程图如图

#include <iostream>
using namespace std;
int main()
{
  int num=0;
  float n,sumone,sum;
  bool  flag; 
  flag=true;
  sum=0.0;
  while(flag)
  { 
    sumone=0.0;
  	do
  	{
      cin>>n; 
	  if(n==-1)
	  {
	  	flag=false;
	  	break;
	  }
  	  sumone+=n;
	}while(n!=0);
	cout<<"当前顾客应付的货款:" ;
    cout <<sumone<<endl;
	if(sumone!=0) num++;
	sum+=sumone;
  }
  cout<<"今天的营业额:"<<sum<<endl;
  cout<<"今天的顾客人数:"<<num<<endl;
  return 0;
}

练习

(1)下列不属于网络连接设备的是()。

   A.网卡       B.交换机         C. TCP/IP           D.路由器      

(2)阅读程序写结果。

#include <iostream>
using namespace std;
int main()
{
 int i,j,p,ans=0,
 i=l;
 do
 {
  p=l;
  j=l;
  while(j<=5)
  { 
   p*=j;
   j++;
   }
  ans+=p;
  1++;
  }while(i<=3);
cout << ans<< endl;
return 0;
}

i,j,p,ans输出:_____________
3.完善程序。
输入一个整数,把它分解成若干个质因数乘积的形式。

#include <iostream>
using namespace std;
int main()
{
  int n,i;
  _____________;
  cout<<n<<'n';
  for(i=2; n!=1;i++)    //n没有除尽,就重复操作
  {
    while(n%i==0)       //n能被i整除,就重复做除法操作
    {
     cout<< i;
     _________;
     if(n!=1)cout <<'*';
    }
  }
return 0;
}
posted @ 2025-07-28 11:55  gdyyx  阅读(22)  评论(0)    收藏  举报