for循环的语法形式 

//形式 1
for
循环是三种循环中使用最多的,for循环的语法形式如下:

for(表达式1; 表达式2; 表达式3)
    语句;


//形式2 
//如果循环体想包含更多的语句,可以加上大括号
 
for(表达式1; 表达式2; 表达式3)
 {
    语句1;
    语句2;
    ...
 }     

  //求和,计算1~100之间的3的倍数的数字之和
  //--产生1~100之间的数字--for
  //判断是否为3的倍数
  //相加 sum +=i;  
 

#include <iostream>    
    
using namespace std;

int main()
{
    int i = 0;
    int sum = 0;
    for(i = 1;i <= 100; i++)
    {
        //判断
        if(i % 3 == 0)
        sum += i; 
    }
    cout << sum << endl;
    return 0;
  }  

     //另一个方法
 //直接产生3的倍数相加 
 int main()
 {
 int i = 0;
 int sum = 0;
 for(i = 3;i<=100;i+=3)
 {
     sum += i;
  } 
  
 cout << sum << endl;
 
  return 0;   
}
这个方法更加简便,循环次数少    

这便是算法,使用不同的算法计算一个题目,不断的精进自己的算法能力

    
  //求评均年龄
  //班上有若干名学生,给出每名学生的年龄(整数)
  //求班上学生的平均年龄,保留小数点后两位
  //输入--第一行有一个整数n,表示学生人数,
  //其后n行每行有一个整数,表示每个学生的年龄,取值15~25
  //输出一行,包含一个浮点数,保留小数2位  


    
#include <iostream>    
    
using namespace std;

int main()
{
    int age;
    int sum;
    
    int n;
    cin >> n;
    
    for(int i = 1;i <= n;i++)
    {
        cin >> age;
        sum += age;
    }
    printf("%.2f\n",sum * 1.0 / n);
    
    
    return 0;
    

    //使用while循环 
    
  int main()
{
    int age;
    int sum;
    
    int n;

    cin >> n;
    
    int m = n;    
    while(m--)
    {
        cin >> age;
        sum += age;
    }
    printf("%.2f\n",sum * 1.0 / n);
    
    
    return 0;
    

求奖牌问题

//2008 年北京奥运会,A 国的运动员参与了 n 天的决赛项目 (1≤n≤100)。
//现在要统计一下 A 国所获得的金、银、铜牌数目及总奖牌数。
//输入第 1 行是 A 国参与决赛项目的天数 n,其后 n 行,
//每一行是该国某一天获得的金、银、铜牌数目(不超过 100)。
//输出 4 个整数,
//为 A 国所获得的金、银、铜牌总数及总奖牌数。
//输入 
//第 1 行是 A 国参与决赛项目的天数 n,其后 n 行,
//每一行是该国某一天获得的金、银、铜牌数目,
//以一个空格分开。
//输出 
//输出 1 行,包括 4 个整数,
//为 A 国所获得的金、银、铜牌总数及总奖牌数,
//以一个空格分开


#include <iostream>

using namespace std;

int a,b,c;//--每一天的奖牌数 
int p1,p2,p3;
//--金-银-铜 
int sum; 

int main()
{
    int n = 0;
    
    cin >> n;
    for(int i = 1;i <= n;i++)
    {
        cin >> a >> b >> c;
        //累计奖牌
        p1 += a;
        p2 += b;
        p3 += c; 
        
    }
    //求和
    sum =p1 + p2 + p3;
     
    cout << p1 <<" "<< p2 << " " << p3 << " " << sum <<endl; 
    
    
    return 0;

//鸡尾酒疗法 


//假设鸡尾酒疗法的有效率为 x,
//新疗法的有效率为 y,
//如果 y-x 大于 5%,则效果更好,
//如果 x-y 大于 5%,则效果更差,否则称为效果差不多。
//下面给出 n 组临床对照实验,其中第一组采用鸡尾酒疗法,
//其他 n-1 组为各种不同的改进疗法。
//请写程序判定各种改进疗法效果如何。
//输入
// 第一行为整数 n(1<n≤20);
//其余 n 行每行两个整数,
//第一个整数是临床实验的总病例数(小于等于 10000),
//第二个疗效有效的病例数
//这 n 行数据中,第一行为鸡尾酒疗法的数据,
//其余各行为各种改进疗法的数据。
//5
//125 99
//112 89
//145 99
//99 97
//123 98
//输出 
//有 n-1 行输出,分别表示对应改进疗法的效果:
//如果效果更好,输出 better;
//如果效果更差,输出 worse;否则输出 same。
//same
//worse
//better
//same

#include <iostream>

using namespace std;

int a,b;
//a是总病列,b有效病列
float x,y;
//x 记录的是鸡尾酒疗法的效率,y是改进组的效率 

int main()
{
    int n;
    cin >> n;
    //读取第一组数据
    cin >> a >> b;
    x =b * 1.0 / a;

    //
    for (int i = 1;i <= n-1;i++)
    {
        cin >> a >> b;
        y = b * 1.0 / a;
        if(y - x > 0.05) 
            cout << "better" << endl;
        else if(x - y > 0.05)
            cout << "worse" << endl;
        else
            cout << "same" << endl;
     } 
    
    return 0;
 } 

救援

救生船从大本营出发,营救若干屋顶上的人回到大本营,屋顶数目以及每个屋顶的坐标。

和人数都将由输入决定,求出所有人都到达大本营并登陆所用的时间。

在直角坐标系的原点是大本营,救生船每次从大本营出发,救了人之后将人送回大本营。坐标系中的点代表屋顶,每个屋顶由其位置坐标和其上的人数表示。救生船每次从大本营出发,以速度 50 米 / 分钟驶向下一个屋顶,达到一个屋顶后,救下其上的所有人,每人上船 1 分钟,船原路返回,达到大本营,每人下船 0.5 分钟。假设原点与任意一个屋顶的连线不穿过其它屋顶。

输入格式

第一行,一个整数,表示屋顶数 n。

接下来依次有 n 行输入,每一行上包含两个表示屋顶相对于大本营的平面坐标位置的实数(单位是米)、一个表示人数的整数,数之间以一个空格分开。

输出格式

一行,救援需要的总时间,精确到分钟(向上取整)。

#include <iostream>
#include <cmath>

using namespace std;

int main()
{
//cout << ceil(6.5) << endl;
    cout << ceil(2.3) << endl;//3
    cout << ceil(3.8) << endl;//4
    cout << ceil(-2.3) << endl;//-2
    cout << ceil(-3.8) << endl;//-3
    //向上取整--ceil 
    
    return 0; 
 } 
//向下取整 --floor 
int main()
{
//cout << ceil(6.5) << endl;
    cout << floor(2.3) << endl;//2
    cout << floor(3.8) << endl;//3
    cout << floor(-2.3) << endl;//-3
    cout << floor(-3.8) << endl;//-4
    //向上取整--ceil 
    
    return 0; 
 } 

//理清思路 
//输入n
//循环n次
//每一次处理一个屋顶x,y,m
//计算距离
//计算时间
//时间累加
//输出时间-向上取整 

#include <iostream>
#include <cmath>

using namespace std;

double x,y;//坐标 
int m;//人数
float t;//距离 

int main()
{
    int n;
    cin >> n;
    for(int i =1;i <= n;i++)
    {
        cin >> x >> y >> m;
        float dis = sqrt(x * x + y * y);
        t += (dis * 2 / 50 + m * 1.5);
        //累加 
     } 
     
    cout << (int)ceil(t) << endl;
    
    return 0;

 } 
 

 计算分数加减表达式的值

Sn​=1/1​−1/2​+1/3−1/4​+1/5​​+...+(−1)^n−1×1/n​。

输入一个整数 n,求 Sn​。

输入格式

输入为一行,含一个正整数 n。

输出格式

输出为一行,为 Sn​ 的值,结果保留小数点后 4 位小数。

//计算分数加减表达式的值
//每一项的分子是1
//每一项的分母是变化的,1~n---借助与循环产生分母

//加减交替

#include <iostream>

using namespace std;

int main()
{
    int n = 0;
    double sn = 0;
    int flag = 1;
    cin >> n;
    
    for(int i =1;i <= n;i++)
    {
        sn +=flag * 1.0 / i;
        flag = -flag;
        //--加减交替 
    }
    printf("%.4f\n",sn);

    
    return 0;
 } 

#include <iostream>
#include <cmath>

using namespace std;

int main()
{
    int n = 0;
    double sn = 0;

    cin >> n;
    
    for(int i =1;i <= n;i++)
    {
       sn += pow(-1,i-1) * 1.0 / i;
       //pow(x,y)--x的y次方 
    }
    printf("%.4f\n",sn);
    
    return 0;
 } 

分数序列求和

有一个分数序列 q1/p1,q2/p2,q3/p3,q4/p4,q5/p5,...,,其中 qi+1​=qi​+pi​,pi+1​=qi​,p1​=1,q1​=2。比如这个序列前 6 项分别是 2/1,3/2,5/3,8/5,13/8,21/13.。求这个分数序列的前 n 项之和。

输入格式

输入一行一个正整数 n(n≤30)。

输出格式

输出一行一个浮点数,表示分数序列前 n 项的和,精确到小数点后 4 位。

#include <iostream>
#include <cstdio>

using namespace std;

///输入n
//循环n次,求n项之和
//每次循环进入:计算1项
//q/p
//计算下一项的q和p
//输出

 
int main()
{
    int n= 0;
    double sum = 0;
    double p = 1;
    double q =2;
     
    cin >> n;
    
    for(int i = 1;i <= n;i++)
    {
        //产生一项,并累加求和
        sum += q / p;
        //为下一项准备好q和p
        q = q + p;
        //q = 3 ;p =1; 
        p = q - p;

         
     } 
    
    printf("%.4f\n",sum);
    
    return 0;
}

更多推荐