循环结构程序设计

一丶已犯错误

1.定义一个变量为字符,判断其是否为题目中的特定字符,应用‘ ’或“ ”引特定字符,而不是定义的字符

例:输入一行,包含整数和一个字符,以一个空格分开,分别表示重量(单位为克)和是否加急。如果字符是y,说明选择加急;如果字符是n,说明不加急。

char a;

if(a=='y')

2.cin>>a>>b;和cin>>a;cin>>b;都可表示同一行输入或分两行输入,且同一行输入时自带空格,但cout<<a<<b;输出时不带空格,若题目要求同一行输出应该cout<<a<<" "<<b;否则会Present Error

3.题目中两数相乘常常省略 * ,但程序不能

二丶心得

1.对于使用循环结构求最小值,鉴于首个数字无法表示,可用999999表示,若小于则取小;反之求最大值,首数可用0表示;对于求和,首数也可用0

2.对于画图形的问题,通常使用≥3次循环复合,因此要注意每层  }  的位置,作业中题目的都可通过求行 i 与列 j 的关系来求解,应先在纸上写出每行 i 与 j 的表达式

例:金中食堂做的蛋糕总是做成菱形,琪琪希望蛋糕上能裱上一圈小花,她想请你再帮个忙,用电脑画出用“*”号组成的裱花形状,这将是个空心的菱形。输入一个整数,n>0。输出由n*2-1层“*”号组成的空心菱形。

样例输入5

样例输出

    *
   * *
  *   *
 *     *
*       *
 *     *
  *   *
   * *
    *
int n;
	cin>>n;
	for(int i=1;i<=2*n-1;i++){
		for(int j=1;j<=2*n-1;j++){
			if(j==n+i-1||j==n-i+1||j==3*n-1-i||j==1+i-n)
			cout<<"*";
			else cout<<" ";
			}
		printf("\n");
		}

观察图形可以注意 i 与 j 间存在关系,通过列出 i 与 j 表格可得 j=n±(i-1)和 j=n±(2n-1-i),后可用if语句判断

3.break使用的情况非常局限,但它在特定情况下非常有用,远比定义bool函数再判断简略

例:输出7和7的倍数,还有包含7的数字。例如(17,27,37...70,71,72,73...),输入一个整数N(N不大于30000)

for(int i=1;i<=n;i++){
        if(i%7==0) cout<<i<<endl;
         else{
            a=i;
            while(a){
            if(a%10==7) {
			cout<<i<<endl;
			break;}
            a=a/10;
            }
        }
    }

这里若没有break结果会错误,因为包含多位7的数字会输出多次,如771输出两次,777输出三次

4.对于情况较为复杂和难以描述的,可使用暴力求解法,即一个一个试

例:求两个正整数的最小公倍数。(0<n<10000,0<m<10000)输入一行,两个整数n和m,中间用一个空格隔开。输出一个整数,即n和m的最小公倍数。

int n,m,a,b;
	cin>>n>>m;
	a=m*n;
	b=m*n;
	for(int i=a;i>=1;i--){
	  if(i%m==0&&i%n==0&&i<=b)
	  b=i;
	  }
	  cout<<b;

两数的最小公倍数最大为两数的乘积m*n,最小为1,所以从m*n到1一个一个试

5.关于换行:不只有#include<cstdio>下的

printf("\n");

还有#include<iostream>下的

cout<<endl;

6.对于比较代入公式结果大小,输出最大或最小,可另外定义新变量,在中途赋值

例:给出一些整数对,它们表示一些平面上的坐标点,给定一个点,求所有那些点到该点最短距离的点。结构为:第一个整数对为所给定的点,后面的整数对为所有其他的点。输入第一个整数对为所给定的点,后面的整数对为所有其他的点。输出到第一个点最短距离的点。

int a,b,c,d,s,m,e,f;
	cin>>a>>b;
	cin>>c>>d;
	s=pow(a-c,2)+pow(b-d,2);
	do{
		m=pow(a-c,2)+pow(b-d,2);
		if(m<s){
			s=m;
			e=c;
			f=d;
			}
	}while(cin>>c>>d);
	cout<<e<<" "<<f;

其中 e 和 f  为记录最值变量的数

7.个人认为较难的题目

国王将金币作为工资,发放给忠诚的骑士。第一天,骑士收到一枚金币;之后两天(第二天和第三天)里,每天收到两枚金币;之后三天(第四、五、六天)里,每天收到三枚金币;之后四天(第七、八、九、十天)里,每天收到四枚金币……这种工资发放模式会一直这样延续下去:当连续N天每天收到N枚金币后,骑士会在之后的连续N+1天里,每天收到N+1枚金币(N为任意正整数)。输入一个整数(范围1到10000),表示天数。输出骑士获得的金币数。

int n,k=1,s=0,i=1;
	cin>>n;
	while(i<=n){
		for(int j=1;j<=k;j++){
		s+=k;
		i++;
		if(i>n) break;
		}
		k++;
		}
	cout<<s<<endl;

其中 i 是计算天数的变量

8.循环结构中的变量也可以在循环结构中定义,但仅在循环结构中有作用,若想要输出经过循环结构变化后的变量,应在循环之前提前定义

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值