美丽数
枚举
- 学会穷举所有情况,并对所有情况进行非法判断
- 学会使用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!
One comment
《人流(珍藏版黑白经典重制 )》记录片高清在线免费观看:https://www.jgz518.com/xingkong/147462.html