美丽数

枚举

  • 学会穷举所有情况,并对所有情况进行非法判断
  • 学会使用visit数组进行访问限制
/*
* @Author: DarkDawn
* @School: BIT
* @Date:   2019-10-16 21:08:12
* @Last Modified by:   DarkDawn
* @Last Modified time: 2019-10-16 21:10:36
*/
#include<stdio.h>
#include<string.h>
// visit访问数组
// 若vis[i]==0,则未访问过
// 若vis[i]==1,则已经访问过
int vis[10]; 
// check函数,检查x是否为美丽数
int check( int x ){
    memset( vis, 0, sizeof(vis) ); // 初始化visit数组 
    while( x ){
        if( vis[x%10] ) return 0; // 判断是否访问过,如访问过返回false
        vis[x%10] = 1; // 访问标记
        x /= 10; // 十进制移位操作
    }
    return 1; // 如果没问题,返回true
}
int main()
{
    int l, r;
    int i, cnt = 0;
    scanf("%d %d", &l, &r);
    for( i = l; i <= r; i++ ){ // 枚举l到r中所有数
        if( check(i) ){
            cnt++;
            printf("%d\n", i);
        }
    }
    if( !cnt ) printf("Not found\n");
    else printf("%d\n", cnt );
    return 0;
}

分数乘法

数组 + 辗转相除

  • 熟练掌握辗转相除求最大公因数的方法
  • 合理解决数据溢出问题
/*
* @Author: DarkDawn
* @School: BIT
* @Date:   2019-10-17 08:12:32
* @Last Modified by:   DarkDawn
* @Last Modified time: 2019-10-17 08:17:29
*/
#include<stdio.h>

int a[55], b[55]; // 记录分子分母
int gcd( int x, int y ){ // 辗转相除法
    return y == 0 ? x : gcd( y, x%y ); // 三目运算符
}
int main()
{
    int n, i, j, res;
    scanf("%d", &n);
    for( i = 1; i <= n; i++ ){
        scanf("%d %d", &a[i], &b[i]);
    }
    // 枚举所有组合,进行约分操作,防止溢出
    for( i = 1; i <= n; i++ ){
        for( j = 1; j <= n; j++ ){
            res = gcd( a[i], b[j] );
            a[i] /= res;
            b[j] /= res;
        }
    }
    int aa = 1, bb = 1;
    for( i = 1; i <= n; i++ ){
        aa *= a[i];
        bb *= b[i];
    }
    if( bb == 1 ) printf("%d\n", aa );
    else printf("%d/%d\n", aa, bb );
    return 0;
}

我要上车

模拟 + 循环 + 字符串

  • 字符串简单应用
  • 嵌套循环的退出方法,合理使用flag标记
  • 思考模拟思维,如何用编程代替人工过程
/*
* @Author: DarkDawn
* @School: BIT
* @Date:   2019-10-30 11:15:10
* @Last Modified by:   DarkDawn
* @Last Modified time: 2019-10-30 11:20:17
*/
#include<stdio.h>

int n;
char bus[6][55] = { // 字符串数组初始化
{},
{"|#.#.#.#.#.#.#.#.#.#.#.#.|D|)"},
{"|#.#.#.#.#.#.#.#.#.#.#.#.|.|"},
{"|#.........................|"},
{"|#.#.#.#.#.#.#.#.#.#.#.#.|.|"},
{"|#.#.#.#.#.#.#.#.#.#.#.#.|.|)"}
};

void solve()
{
    if( n >= 49 ){ // 非法情况,车已坐满
        printf("no\n");
        return;
    }
    printf("yes\n");
    printf("+--------------------------+\n");
    int flag = 0; // 退出循环的flag标记
    for(int i = 23; i > 0; i -= 2){ // 依次让所有对应乘客入座——模拟思想
        for(int j = 1; j <= 5; j++ ){
            if( i != 1 && j == 3 ) continue;
            if( n ){ // 还有乘客
                bus[j][i] = 'O';
                n--;
            }else{ // 小航入座
                bus[j][i] = 'X';
                flag = 1; // 无剩余乘客,修改退出循环标记
                break;
            }
        }
        if( flag ) break; // 退出循环
    }
    for(int i = 1; i <= 5; i++ ){
        printf("%s\n", bus[i]); // 字符串输出
    }
    printf("+--------------------------+\n");
}
int main()
{
    scanf("%d", &n);
    solve();
    return 0;
 } 
//+--------------------------+
//|#.#.#.#.#.#.#.#.#.O.O.O.|D|)
//|#.#.#.#.#.#.#.#.#.X.O.O.|.|
//|#.........................|
//|#.#.#.#.#.#.#.#.#.#.O.O.|.|
//|#.#.#.#.#.#.#.#.#.#.O.O.|.|)
//+--------------------------+

最后,祝大家BUG Free,一发AC!

Last modification:November 5, 2019
如果觉得我的文章对你有用,请随意赞赏