铺砖问题

4个工人3天铺了90平方米地板砖,照这样计算,,5个工人6天能铺多少地板砖?

  1. #include<iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. cout << (90.0 / 3 / 4) * 5 * 6 << endl;
  6. return 0;
  7. }

求两地距离

快车75km/h甲地出发,慢车65km/h乙地出发,相遇时快车比慢车多行驶40km,求甲乙出发点距离

  1. #include<iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. cout << 40 / (75 - 65) * (75 + 65) << endl;
  6. return 0;
  7. }

求小明买的铅笔数和剩多少钱

小明从零花钱中拿了4张10元的纸币去文具店买铅笔,铅笔每支0.45元。
请问:他最多能买多少支铅笔,还剩下多少钱?

  1. #include<iostream>
  2. using namespace std;
  3. //余数r:a = k * b + r,其中k是整数
  4. int main()
  5. {
  6. double a = 0.45;//铅笔单价
  7. int b = 40;
  8. cout << "铅笔数量:" << (int)(b / a) << endl;
  9. cout << "剩下多少钱:"<< b - (int)(b/a) * a << endl;
  10. return 0;
  11. }

求桌子和椅子的价格

已知一张桌子的价钱是一张椅子价钱的10倍,又知一张桌子比一张椅子的价钱多288元,
问:一张桌子和一张椅子各多少钱?

  1. #include<iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. float x;
  6. x = 288.0 / 9;//椅子价格
  7. cout << "椅子:" << x << endl;
  8. cout << "桌子:" << 10 * x << endl;
  9. return 0;
  10. }

输出w的ASCII码值

  1. #include<iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. char a = 'w';
  6. cout << (int)a << endl;//强制类型转换
  7. return 0;
  8. }

输入练习

输入一个三位数:123
输出:321

  1. #include<iostream>
  2. #pragma warning(disable: 4996)
  3. using namespace std;
  4. int main()
  5. {
  6. //输入一个三位数
  7. int a;
  8. scanf("%d", &a);
  9. //拆三位数每个位
  10. int b = a / 100;
  11. int c = a / 10 % 10;
  12. int d = a % 10;
  13. //合并成一个新的三位数
  14. int e = d * 100 + c * 10 + b;
  15. //输出新的三位数
  16. printf("%d\n", e);
  17. return 0;
  18. }

算工资

妙妙的爸爸2017月薪为5000,由于公司制度,爸爸的工资半年固定增加20%,求妙妙爸爸2018年的月薪。

  1. #include<iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. int a = 5000;//17年工资
  6. cout << "18年工资:" << a*(1+0.2)*(1+0.2) << endl;
  7. return 0;
  8. }

投资回报

妙妙去年赚了一大笔钱,他想把这些钱用于投资,
并对自己能得到多少收益感到好奇。
已知投资的年利率为r(0~20之间的整数),
小华现有m元钱。他想知道投资多少年后会超过y元。
(用do-while语句实现)
输入样例
5 5000 6077
输出样例

  1. #include<iostream>
  2. using namespace std;
  3. double r, m, y, s = 0;
  4. int main()
  5. {
  6. cin >> r >> m >> y;
  7. r = r / 100;
  8. do {
  9. m = m * (1 + r);
  10. s++;
  11. } while (m <= y);
  12. cout << s;
  13. return 0;
  14. }

求书的ISBN号码

每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字、1位识别码和3位分隔符,其规定格式如“x-xxx-xxxxx-x”,其中符号“-”是分隔符(键盘上的减号),最后一位是识别码,例如0-670-82162-4就是一个标准的ISBN码。ISBN码的首位数字表示书籍的出版语言,例如0代表英语;第一个分隔符“-”之后的三位数字代表出版社,例如670代表维京出版社;第二个分隔之后的五位数字代表该书在出版社的编号;最后一位为识别码。识别码的计算方法如下:首位数字乘以1加上次位数字乘以2……以此类推,用所得的结果mod 11,所得的余数即为识别码,如果余数为10,则识别码为大写字母X。例如ISBN号码0-670-82162-4中的识别码4是这样得到的:对067082162这9个数字,从左至右,分别乘以1,2,…,9,再求和,即0×1+6×2+„„+2×9=158,然后取158 mod 11的结果4作为识别码。你的任务是编写程序判断输入的ISBN号码中识别码是否正确,如果正确,则仅输出“Right”;如果错误,则输出你认为是正确的ISBN号码。
输入格式
只有一行,是一个字符序列,表示一本书的ISBN号码(保证输入符合ISBN号码的格式要求)。
输出格式
共一行,假如输入的ISBN号码的识别码正确,那么输出“Right”,否则,按照规定的格式,输出正确的ISBN号码(包括分隔符“-”)。
样例输入
样例 #1: (有多组测试数据)
0-670-82162-4
样例 #2:
0-670-82162-0
样例输出
样例 #1:
Right
样例 #2:
0-670-82162-4
其它说明

  1. #include<iostream>
  2. #pragma warning(disable:4996)
  3. using namespace std;
  4. long long a, b, c, d, m, sum;
  5. char d1;
  6. int main()
  7. {
  8. scanf("%d-%d-%d-%c", &a, &b, &c, &d1);
  9. if(d1 == 'X')//输入的是X,d就是10
  10. {
  11. d = 10;
  12. }
  13. else
  14. {
  15. d = d1 - 48;//48是字符‘0’的ASCII码,d1 - '0'是为了得到数字5,如:输入‘5’-‘0’等同于53 - 48 = 5,这样才能获得键盘字面的数字5,不然直接输出的是‘5’的ASCII码值
  16. }
  17. m = (a * 1000 + b) * 100000 + c;//为了把输入的数字合并成一个数;如:合称为067082162
  18. //mod11就是与11取模
  19. //通过m算校验码:(0*1 + 6*2 + 7*3 + 0*4 + 8*5 + 2*6 + 1*7 + 6*8 + 2*9)%11
  20. //上面式子等同于:2*9%11 + 6*8%11 + 1*7%11 + 2*6%11 + 8*5%11 + 0*4%11 + 7*3%11 + 6*2%11 + 0*1%11
  21. for(int i = 9; I >= 1; i--)
  22. {
  23. sum = sum + m % 10 * i;
  24. sum = sum % 11;
  25. m = m / 10;
  26. }
  27. if(sum == d)
  28. {
  29. cout << "RIGHT" << endl;
  30. }
  31. else
  32. {
  33. cout << a << "-" << b << "-" << c << "-";
  34. if(sum == 10)
  35. {
  36. cout << "X";
  37. }
  38. else
  39. {
  40. cout << sum << endl;
  41. }
  42. }
  43. return 0;
  44. }


铁路种树

题目:路的长度为L米,把路看作一个坐标轴,每隔1米开始栽树,在上修M条地铁线,线路之间是会有重合的,
输入每条地铁线路的起止坐标,求最后还剩多少棵树。
输入:
500 3
150 300
100 200
470 471
输出:298

  1. #include <iostream>
  2. using namespace std;
  3. int a[1000] = { 0 };//元素为0表示有树
  4. int main()
  5. {
  6. int L, M, p, q, sum = 0;//p是车站起点,q是车站终点
  7. cin >> L >> M;
  8. for (int i = 1; i < M; i++)
  9. {
  10. cin >> p >> q;
  11. for (int j = p; j <= q; j++)//把每次起点到终点的树砍掉,用1覆盖原数组的值,这种用新数组覆盖旧数组的思想很重要
  12. {
  13. a[j] = 1;//元素赋值为1,表示数被挖走了
  14. }
  15. }
  16. for (int i = 0; i <= L; i++)
  17. {
  18. if (a[i]==0)
  19. {
  20. sum++;
  21. }
  22. }
  23. cout << sum << endl;
  24. return 0;
  25. }

函数调用练习

计算C(m,n)的值,即从m个数中任意取出n个数的所有情况数。( C(m,n)=m!/((m-n)!n!) )。
6!=1
23456

#include <iostream>
using namespace std;

//阶乘
int Fac(int n)
{
    int fac = 1;
    for(int i = 2; i <= n; i++)
    {
        fac = fac * i;
    }
    return fac;
}

//公式套用
int C(int m, int n)
{
    return Fac(n) / (Fac(m - n) * Fac(n));
}

int main()
{
    cout << C(5, 2) << endl;
    return 0;
}

使用重载函数编程求出2个,3个和4个int型数据的最大值

#include <iostream>
using namespace std;

int Max(int a, int b)
{
    return a > b ? a : b;
}

int Max(int a, int b, int c)
{
    return Max(Max(a, b), c);
}

int Max(int a, int b, int c)
{
    return Max(Max(a, b, c), d);
}

int main()
{
    int a = 1, b = 2, c = 3, d = 4;
    cout << Max(a, b) << endl;
    cout << Max(a, b, c) << endl;
    cout << Max(a, b, c, d) << endl;
    return 0;
}

两个相差为2的素数成为素数对,如5和7,17和19等,
找出所有两个数均不大于n的素数对。
(1<=n<=10000)
输入样例:
100
输出样例:
3 5
5 7
11 13
17 19
29 31
41 43
59 61
71 73

#include <iostream>
using namespace std;

int IsPrime(int data)
{
    int i;
    for(i = 2; i <= data; i++)
    {
        if(data % i == 0)
            break;
    }
    if(i == data)
        return 1;
    else
           return 0;
}

int Count(int n)
{
    int i, count = 0;
    for(i = 2; i <= n; i++)
    {
        if(IsPrime(i))
            count++;
    }
    return count;
}

int main()
{
    int n;
    cin >> n;
    cout << Count(n) << endl;

    return 0;
}

最长单词

一个以‘.’结尾的简单英文句子,单词之间用空格分隔,没有缩写形式和其它特殊形式。
输入
一个以‘.’结尾的简单英文句子(长度不超过500),单词之间用空格分隔,
没有缩写形式和其它特殊形式。
输出
该句子中最长的单词。如果多于一个,则输出第一个。

样例输入
I am a student of Peking University.
样例输出
University

int main()
{
    char s[2500];
    int k;
    int len;
    int max_len = 0, max_position;
    int sum = 0;
    int i;

    gets_s(s);
    for(i = 0; i < strlen(s); i++)
    {
        if (s[i] != ' ' && a[i] != '.')
        {
            sum++;
        }
        else if(sum > 0)
        {
            if(sum > max_len)
            {
                max_len = sum;
                max_posision = i - sum;
            }
            sum = 0;
        }
    }
    for(i = max_posision; i <= max_len + max_position - 1; i++)
    {
        cout << s[i];
    }
    cout << endl;
    return 0;
}

几个boy和girl

一个长度为l(3≤l≤255)的字符串中被反复贴有 boy 和 girl 两单词,
后贴上的可能覆盖已贴上的单词(没有被覆盖的用句点表示),最终每个单词至少有一个字符没有被覆盖。
问贴有几个 boy 几个 girl?
输入格式
一行被被反复贴有boy和girl两单词的字符串。
输出格式
两行,两个整数。第一行为boy的个数,第二行为girl的个数。
输入输出样例
……boyogirlyy……girl…….
4
2

char s[256], *sex[]= { "boy", "girl" }, sum[2];
int main()
{
    scanf("%s", s);
    for(int i = 0; i < 2; ++i)
        for(char*p = s; *p; ++p)
            for(char*q = sex[i], *r = p; *q && *r; ++q,++r)
                if(*q == *r)
                {
                    ++sum[i];
                    break;
                }
    for(int i = 0; i < 2; ++i)
        printf("%d\n", sum[i]);
    return 0;
}