目录
BC99 序列中整数去重
描述
输入n个整数的序列,要求对这个序列进行去重操作。所谓去重,是指对这个序列中每个重复出现的整数,只保留该数第一次出现的位置,删除其余位置。
输入描述:
输入包含两行,第一行包含一个正整数n(1 ≤ n ≤ 1000),表示第二行序列中数字的个数;第二行包含n个整数(范围1~5000),用空格分隔。
输出描述:
输出为一行,按照输入的顺序输出去重之后的数字,用空格分隔。
示例1
输入:
5
10 12 93 12 75
输出:
10 12 93 75
#include <stdio.h>
/*
int main()
{
int n = 0;
int i = 0;
int arr[1000] = {0};
scanf("%d", &n);
for(i=0; i<n; i++)
{
scanf("%d", &arr[i]);
int j = 0;
int flag = 1;
for(j=0; j<i; j++)
{
if(arr[i] == arr[j])
{
flag = 0;
break;
}
}
if(flag == 1)
{
printf("%d ", arr[i]);
}
}
return 0;
}
*/
int main()
{
int n = 0;
int i = 0;
int arr[1000] = { 0 };
scanf("%d", &n);
for (i = 0; i < n; i++)
{
scanf("%d", &arr[i]);
}
//去重
for (i = 0; i < n; i++)
{
//判断arr[i]是否在后面出现
int j = 0;
for (j = i+1; j < n; j++)
{
if (arr[i] == arr[j])
{
//去重 后面的元素往前覆盖
int k = 0;
for (k = j; k < n - 1; k++)
{
arr[k] = arr[k + 1];
}
n--; //覆盖完少一个元素
j--; //避免 1 2 3 3 3 5 7
}
}
}
for (i = 0; i < n; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
BC100 有序序列合并
描述
输入两个升序排列的序列,将两个序列合并为一个有序序列并输出。
输入描述:
输入包含三行,
第一行包含两个正整数n, m(1 ≤ n,m ≤ 100),用空格分隔。n表示第二行第一个升序序列中数字的个数,m表示第三行第二个升序序列中数字的个数。
第二行包含n个整数(范围1~5000),用空格分隔。
第三行包含m个整数(范围1~5000),用空格分隔。
输出描述:
输出为一行,输出长度为n+m的升序序列,即长度为n的升序序列和长度为m的升序序列中的元素重新进行升序序列排列合并。
示例1
输入:
5 6
1 3 7 9 22
2 8 10 17 33 44
输出:
1 2 3 7 8 9 10 17 22 33 44
#include <stdio.h>
/*
int main()
{
int n = 0;
int m = 0;
int arr1[100] = { 0 };
int arr2[100] = { 0 };
int arr3[200] = { 0 };
scanf("%d %d", &n, &m);
int i = 0;
for (i = 0; i < n; i++)
{
scanf("%d", &arr1[i]);
}
for (i = 0; i < m; i++)
{
scanf("%d", &arr2[i]);
}
//合并有序序列
i = 0; //
int j = 0;
int k = 0;
while (i < n && j < m)
{
if (arr1[i] < arr2[j])
{
arr3[k++] = arr1[i++];
}
else
{
arr3[k++] = arr2[j++];
}
}
if (i == n) //如果arr1先比完 把arr2剩下的放进arr3
{
for (; j < m; j++)
{
arr3[k++] = arr2[j];
}
}
else
{
for (; i < n; i++)
{
arr3[k++] = arr1[i];
}
}
for (i = 0; i < k; i++)
{
printf("%d ", arr3[i]);
}
return 0;
}
*/
int main()
{
int n = 0;
int m = 0;
int arr1[100] = { 0 };
int arr2[100] = { 0 };
scanf("%d %d", &n, &m);
int i = 0;
for (i = 0; i < n; i++)
{
scanf("%d", &arr1[i]);
}
for (i = 0; i < m; i++)
{
scanf("%d", &arr2[i]);
}
//合并有序序列
i = 0; //
int j = 0;
int k = 0;
while (i < n && j < m)
{
if (arr1[i] < arr2[j])
{
printf("%d ", arr1[i++]);
}
else
{
printf("%d ", arr2[j++]);
}
}
if (i == n) // 如果arr1先比完 把arr2剩下的放进arr3
{
for (; j < m; j++)
{
printf("%d ", arr2[j]);
}
}
else
{
for (; i < n; i++)
{
printf("%d ", arr1[i]);
}
}
return 0;
}
BC101 班级成绩输入输出
描述
输入一个班级5个学生各5科成绩,输出5个学生各5科成绩及总分。
输入描述:
五行,每行输入一个学生各5科成绩(浮点数表示,范围0.0~100.0),用空格分隔。
输出描述:
五行,按照输入顺序每行输出一个学生的5科成绩及总分(小数点保留1位),用空格分隔。
示例1
输入:
98.5 96.0 100 99 88
60.5 77 88.5 99 60
80 80.5 89 91 92
93 94 95.5 96 97.5
100 98 88.5 88 78.5
输出:
98.5 96.0 100.0 99.0 88.0 481.5
60.5 77.0 88.5 99.0 60.0 385.0
80.0 80.5 89.0 91.0 92.0 432.5
93.0 94.0 95.5 96.0 97.5 476.0
100.0 98.0 88.5 88.0 78.5 453.0
#include <stdio.h>
/* 数组行列
int main()
{
float arr[5][5] = { 0.0 };
int i = 0;
int j = 0;
float sum = 0.0;
for (i = 0; i < 5; i++)
{
for (j = 0; j < 5; j++)
{
scanf("%f", &arr[i][j]);
}
}
for (i = 0; i < 5; i++)
{
sum = 0.0;
for (j = 0; j < 5; j++)
{
sum += arr[i][j];
printf("%.1f ", arr[i][j]);
}
printf("%.1f\n", sum);
}
return 0;
}
*/
int main()
{
int i = 0;
double score[5] = { 0 };
for (i = 0; i < 5; i++)
{
//读取一个人的5科成绩
int j = 0;
double sum = 0.0;
for (j = 0; j < 5; j++)
{
scanf("%lf", &score[j]);
sum += score[j];
}
for (j = 0; j < 5; j++)
{
printf("%.1lf ", score[j]);
}
printf("%.1lf\n", sum);
}
return 0;
}
BC102 矩阵元素定位
描述
KiKi得到了一个n行m列的矩阵,现在他想知道第x行第y列的值是多少,请你帮助他完成这个任务。
输入描述:
第一行包含两个数n和m,表示这个矩阵包含n行m列。从2到n+1行,每行输入m个整数(范围-231~231-1),用空格分隔,共输入n*m个数,表示矩阵中的元素。接下来一行输入x和y,用空格分隔,表示KiKi想得到的元素的位置。(1≤x≤n≤10,1≤y≤m≤10)
输出描述:
一行,输出一个整数值,为KiKi想知道的值。
示例1
输入:
2 3
1 2 3
4 5 6
1 2
输出:
2
#include <stdio.h>
int main()
{
int n = 0;
int m = 0;
int arr[10][10] = {0};
scanf("%d %d", &n, &m);
int i = 0;
int j = 0;
for(i=0; i<n; i++)
{
for(j=0; j<m; j++)
{
scanf("%d", &arr[i][j]);
}
}
int x = 0;
int y = 0;
scanf("%d %d", &x, &y);
printf("%d", arr[x-1][y-1]);
return 0;
}
BC103 序列重组矩阵
描述
KiKi现在得到一个包含nm个数的整数序列,现在他需要把这nm个数按顺序规划成一个n行m列的矩阵并输出,请你帮他完成这个任务。
输入描述:
一行,输入两个整数n和m,用空格分隔,第二行包含n*m个整数(范围-231~231-1)。(1≤n≤10, 1≤m≤10)
输出描述:
输出规划后n行m列的矩阵,每个数的后面有一个空格。
示例1
输入:
2 3
1 2 3 4 5 6
输出:
1 2 3
4 5 6
#include <stdio.h>
/*
int main()
{
int n = 0;
int m = 0;
int arr[10][10] = {0};
scanf("%d %d", &n, &m);
int i = 0;
int j = 0;
for(i=0; i<n; i++)
{
for(j=0; j<m; j++)
{
scanf("%d", &arr[i][j]);
}
}
for(i=0; i<n; i++)
{
for(j=0; j<m; j++)
{
printf("%d ", arr[i][j]);
}
printf("\n");
}
return 0;
}
*/
/*
int main()
{
int n = 0;
int m = 0;
int arr[10][10] = {0};
scanf("%d %d", &n, &m);
int i = 0;
int j = 0;
for(i=0; i<n; i++)
{
for(j=0; j<m; j++)
{
scanf("%d", &arr[i][j]);
printf("%d ", arr[i][j]);
}
printf("\n");
}
return 0;
}
*/
int main()
{
int n = 0;
int m = 0;
scanf("%d %d", &n, &m);
int i = 0;
int j = 0;
int tmp = 0;
for(i=1; i<=n*m; i++)
{
scanf("%d", &tmp);
printf("%d ", tmp);
if(i%m == 0)
printf("\n");
}
return 0;
}
BC104 最高身高
描述
KiKi想从n行m列的方阵队列中找到身高最高的人的位置,请你帮助他完成这个任务。
输入描述:
第一行包含两个整数n和m,表示这个方阵队列包含n行m列。从2到n+1行,每行输入m个整数(范围-231~231-1),用空格分隔,共输入n*m个数,表示方阵中的所有人的身高(保证输入身高都不相同)。(1≤x≤n≤10,1≤y≤m≤10)
输出描述:
一行,输出两个整数,用空格分隔,表示方阵中身高最高的人所在的行号和列号。
示例1
输入:
2 2
175 180
176 185
输出:
2 2
#include <stdio.h>
int main()
{
int n = 0;
int m = 0;
int max = 0;
scanf("%d %d", &n, &m);
int arr[10][10] = {0};
int i = 0;
int j = 0;
int l = 0;
int r = 0;
for(i=0; i<n; i++)
{
for(j=0; j<m; j++)
{
scanf("%d", &arr[i][j]);
if(max < arr[i][j])
{
max = arr[i][j];
l = i;
r = j;
}
}
}
printf("%d %d", l+1, r+1);
return 0;
}
/*
int main()
{
int n,m,i,j;
int max = 0;
scanf("%d %d", &n, &m);
int arr[10][10] = {0};
for(i=0; i<n; i++)
{
for(j=0; j<m; j++)
{
scanf("%d", &arr[i][j]);
max=max>arr[i][j]?max:arr[i][j];
}
}
for(i=0; i<n; i++)
{
for(j=0; j<m; j++)
{
if(max == arr[i][j])
{
printf("%d %d", i+1, j+1);
break;
}
}
}
return 0;
}
*/
BC105 矩阵相等判定
描述
KiKi得到了两个n行m列的矩阵,他想知道两个矩阵是否相等,请你回答他。(当两个矩阵对应数组元素都相等时两个矩阵相等)。
输入描述:
第一行包含两个整数n和m,表示两个矩阵包含n行m列,用空格分隔。
从2到n+1行,每行输入m个整数(范围-231~231-1),用空格分隔,共输入n*m个数,表示第一个矩阵中的元素。
从n+2行到2n+1,每行输入m个整数(范围-231~231-1),用空格分隔,共输入n*m个数,表示第二个矩阵中的元素。
1 < n,m < 10
输出描述:
一行,如果两个矩阵相等输出"Yes"并换行,否则输出"No"并换行。
示例1
输入:
2 2
1 2
3 4
1 2
3 4
输出:
Yes
#include <stdio.h>
/*int main()
{
int arr1[10][10] = { 0 };
int arr2[10][10] = { 0 };
int n = 0;
int m = 0;
scanf("%d %d", &n, &m);
int i = 0;
int j = 0;
//输入了矩阵1
//n行
for (i = 0; i < n; i++)
{
//m列
for (j = 0; j < m; j++)
{
scanf("%d", &arr1[i][j]);
}
}
//输入了矩阵2
for (i = 0; i < n; i++)
{
//m列
for (j = 0; j < m; j++)
{
scanf("%d", &arr2[i][j]);
}
}
//判断
int flag = 1; //默认相同
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
{
if (arr1[i][j] != arr2[i][j])
{
flag = 0;
break;
}
}
}
if (flag == 1)
{
printf("Yes\n");
}
else
{
printf("No\n");
}
return 0;
} */
int main()
{
int n = 0;
int m = 0;
int arr1[10][10] = { 0 };
int arr2[10][10] = { 0 };
scanf("%d %d", &n, &m);
int i = 0;
int j = 0;
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
{
scanf("%d", &arr1[i][j]);
}
}
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
{
scanf("%d", &arr2[i][j]);
}
}
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
{
if (arr1[i][j] != arr2[i][j])
{
printf("No\n");
return 0;
}
}
}
printf("Yes\n");
return 0;
}
BC106 上三角矩阵判定
描述
KiKi想知道一个n阶方矩是否为上三角矩阵,请帮他编程判定。上三角矩阵即主对角线以下的元素都为0的矩阵,主对角线为从矩阵的左上角至右下角的连线。
输入描述:
第一行包含一个整数n,表示一个方阵包含n行n列,用空格分隔。 (1≤n≤10)
从2到n+1行,每行输入n个整数(范围-231~231-1),用空格分隔,共输入n*n个数。
输出描述:
一行,如果输入方阵是上三角矩阵输出"YES"并换行,否则输出"NO"并换行。
示例1
输入:
3
1 2 3
0 4 5
0 0 6
输出:
YES
#include <stdio.h>
int main()
{
int n = 0;
int arr[10][10] = {0};
scanf("%d", &n);
int i = 0;
int j = 0;
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
scanf("%d", &arr[i][j]);
}
}
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
if(i>j)
{
if(arr[i][j] != 0)
{
printf("NO\n");
return 0;
}
}
}
}
printf("YES\n");
return 0;
}
BC107 矩阵转置
描述
KiKi有一个矩阵,他想知道转置后的矩阵(将矩阵的行列互换得到的新矩阵称为转置矩阵),请编程帮他解答。
输入描述:
第一行包含两个整数n和m,表示一个矩阵包含n行m列,用空格分隔。 (1≤n≤10,1≤m≤10)
从2到n+1行,每行输入m个整数(范围-231~231-1),用空格分隔,共输入n*m个数,表示第一个矩阵中的元素。
输出描述:
输出m行n列,为矩阵转置后的结果。每个数后面有一个空格。
示例1
输入:
2 3
1 2 3
4 5 6
输出:
1 4
2 5
3 6
#include <stdio.h>
int main()
{
int n = 0;
int m = 0;
int arr[10][10] = { 0 };
scanf("%d %d", &n, &m);
int i = 0;
int j = 0;
//输入
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
{
scanf("%d", &arr[i][j]);
}
}
//转置输出
for (i = 0; i < m; i++) //打印3行2列
{
for (j = 0; j < n; j++)
{
printf("%d ", arr[j][i]);
}
printf("\n");
}
return 0;
}
BC108 矩阵交换
描述
KiKi有一个矩阵,他想知道经过k次行变换或列变换后得到的矩阵。请编程帮他解答。
输入描述:
第一行包含两个整数n和m,表示一个矩阵包含n行m列,用空格分隔。 (1≤n≤10,1≤m≤10)
从2到n+1行,每行输入m个整数(范围-231~231-1),用空格分隔,共输入n*m个数,表示第一个矩阵中的元素。
接下来一行输入k,表示要执行k次操作(1≤k≤5)。接下来有k行,每行包括一个字符t和两个数a和b,中间用空格格分隔,t代表需要执行的操作,当t为字符’r’时代表进行行变换,当t为字符’c’时代表进行列变换,a和b为需要互换的行或列(1≤a≤b≤n≤10,1≤a≤b≤m≤10)。
输出描述:
输出n行m列,为矩阵交换后的结果。每个数后面有一个空格。
示例1
输入:
2 2
1 2
3 4
1
r 1 2
输出:
3 4
1 2
#include <stdio.h>
int main()
{
int n = 0;
int m = 0;
int arr[10][10] = {0};
scanf("%d %d", &n, &m);
int i = 0;
int j = 0;
for(i=0; i<n; i++)
{
for(j=0; j<m; j++)
{
scanf("%d", &arr[i][j]);
}
}
int k = 0;//操作的次数
scanf("%d", &k);
char t = 0;
int a = 0;
int b = 0;
for(i=0; i<k; i++)
{
//每一次操作的过程
scanf(" %c %d %d", &t, &a, &b); //消除\n
if(t =='r') //交换行
{
for(j=0; j<m; j++)
{
int tmp = arr[a-1][j];
arr[a-1][j] = arr[b-1][j];
arr[b-1][j] = tmp;
}
}
else if(t == 'c') //交换列
{
for(j=0; j<n; j++)
{
int tmp = arr[j][a-1];
arr[j][a-1] = arr[j][b-1];
arr[j][b-1] = tmp;
}
}
}
for(i=0; i<n; i++)
{
for(j=0; j<m; j++)
{
printf("%d ", arr[i][j]);
}
printf("\n");
}
return 0;
}
BC109 杨辉三角
描述
KiKi知道什么叫杨辉三角之后对杨辉三角产生了浓厚的兴趣,他想知道杨辉三角的前n行,请编程帮他解答。杨辉三角,本质上是二项式(a+b)的n次方展开后各项的系数排成的三角形。其性质包括:每行的端点数为1, 一个数也为1;每个数等于它左上方和上方的两数之和。
输入描述:
第一行包含一个整数数n。 (1≤n≤30)
输出描述:
包含n行,为杨辉三角的前n行,每个数输出域宽为5。
示例1
输入:
6
输出:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
#include <stdio.h>
int main()
{
int n = 0;
int arr[30][30] = { 0 };
scanf("%d", &n);
int i = 0;
int j = 0;
for (i = 0; i < n; i++)
{
for (j = 0; j <= i; j++)
{
if (j == 0)
arr[i][j] = 1;
if (i == j)
arr[i][j] = 1;
if (i >= 2 && j >= 1)
arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
}
}
for (i = 0; i < n; i++)
{
for (j = 0; j <= i; j++)
{
printf("%5d", arr[i][j]);
}
printf("\n");
}
return 0;
}
BC110 井字棋
描述
KiKi和BoBo玩 “井”字棋。也就是在九宫格中,只要任意行、列,或者任意对角线上面出现三个连续相同的棋子,就能获胜。请根据棋盘状态,判断当前输赢。
输入描述:
三行三列的字符元素,代表棋盘状态,字符元素用空格分开,代表当前棋盘,其中元素为K代表KiKi玩家的棋子,为O表示没有棋子,为B代表BoBo玩家的棋子。
输出描述:
如果KiKi获胜,输出“KiKi wins!”;
如果BoBo获胜,输出“BoBo wins!”;
如果没有获胜,输出“No winner!”。
示例1
输入:
K O B
O K B
B O K
输出:
KiKi wins!
#include <stdio.h>
int main()
{
char arr[3][3] = { 0 };
int i = 0;
int j = 0;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
scanf(" %c", &arr[i][j]); //字符 读取空格
//getchar();
}
}
//判断输赢
char flag = 'o';
for (i = 0; i < 3; i++)
{
//3行
if (arr[i][0]==arr[i][1] && arr[i][1]==arr[i][2] && arr[i][1] != 'o')
{
flag = arr[i][1];
break;
}
//3列
if (arr[0][i] == arr[1][i] && arr[1][i] == arr[2][i] && arr[1][i] != 'o')
{
flag = arr[1][i];
break;
}
}
//2条对角线
if (arr[0][0] == arr[1][1] && arr[1][1] == arr[2][2] && arr[1][1] != 'o')
{
flag = arr[1][1];
}
if (arr[0][2] == arr[1][1] && arr[1][1] == arr[2][0] && arr[1][1] != 'o')
{
flag = arr[1][1];
}
if (flag == 'K')
{
printf("KiKi wins!\n");
}
else if (flag == 'B')
{
printf("BoBo wins!\n");
}
else
{
printf("No winner!\n");
}
return 0;
}
BC111 小乐乐与进制转换
描述
小乐乐在课上学习了二进制八进制与十六进制后,对进制转换产生了浓厚的兴趣。因为他的幸运数字是6,所以他想知道一个数表示为六进制后的结果。请你帮助他解决这个问题。
输入描述:
输入一个正整数n (1 ≤ n ≤ 109)
输出描述:
输出一行,为正整数n表示为六进制的结果
示例1
输入:
6
输出:
10
示例2
输入:
120
输出:
320
#include <stdio.h>
int main()
{
int n = 0;
int arr[50] = {0};
scanf("%d", &n);
int i = 0;
while(n)
{
arr[i] = n % 6;
i++;
n = n /6;
}
for(i--; i>=0; i--)
{
printf("%d", arr[i]);
}
return 0;
}
BC112 小乐乐求和
描述
小乐乐最近接触了求和符号Σ,他想计算的结果。但是小乐乐很笨,请你帮助他解答。
输入描述:
输入一个正整数n (1 ≤ n ≤ 109)
输出描述:
输出一个值,为求和结果。
示例1
输入:
1
输出:
1
示例2
输入:
10
输出:
55
#include <stdio.h>
//1-n的和
int main()
{
int n = 0;
long long sum = 0;
scanf("%d", &n);
int i = 0;
for(i=1; i<=n; i++)
{
sum += i;
}
printf("%lld\n", sum);
return 0;
}
/*
int main()
{
long long n = 0;
long long sum = 0;
scanf("%d", &n);
sum = (1+n)*n/2;
printf("%lld\n", sum);
return 0;
}
*/
BC113 小乐乐定闹钟
描述
小乐乐比较懒惰,他现在想睡觉,然后再去学习。他知道现在的时刻,以及自己要睡的时长,想设定一个闹钟叫他起床学习,但是他太笨了,不知道应该把闹钟设定在哪个时刻,请你帮助他。(只考虑时和分,不考虑日期)
输入描述:
输入现在的时刻以及要睡的时长k(单位:minute),中间用空格分开。
输入格式:hour:minute k(如hour或minute的值为1,输入为1,而不是01)
(0 ≤ hour ≤ 23,0 ≤ minute ≤ 59,1 ≤ k ≤ 109)
输出描述:
对于每组输入,输出闹钟应该设定的时刻,输出格式为标准时刻表示法(即时和分都是由两位表示,位数不够用前导0补齐)。
示例1
输入:
0:0 100
输出:
01:40
示例2
输入:
1:0 200
输出:
04:20
#include <stdio.h>
int main()
{
int h = 0;
int m = 0;
int k = 0;
scanf("%d:%d %d", &h, &m, &k);
h = ((m+k)/60+h)%24;
m = (m+k)%60;
printf("%02d:%02d\n", h, m);
return 0;
}
BC114 小乐乐排电梯
描述
小乐乐学校教学楼的电梯前排了很多人,他的前面有n个人在等电梯。电梯每次可以乘坐12人,每次上下需要的时间为4分钟(上需要2分钟,下需要2分钟)。请帮助小乐乐计算还需要多少分钟才能乘电梯到达楼上。(假设最初电梯在1层)
输入描述:
输入包含一个整数n (0 ≤ n ≤ 109)
输出描述:
输出一个整数,即小乐乐到达楼上需要的时间。
示例1
输入:
1
输出:
2
示例2
输入:
12
输出:
6
#include <stdio.h>
int main()
{
int n = 0;
int t = 0;
scanf("%d", &n);
t = (n /12) * 4 +2;
printf("%d", t);
return 0;
}
BC115 小乐乐与欧几里得
描述
小乐乐最近在课上学习了如何求两个正整数的最大公约数与最小公倍数,但是他竟然不会求两个正整数的最大公约数与最小公倍数之和,请你帮助他解决这个问题。
输入描述:
每组输入包含两个正整数n和m。(1 ≤ n ≤ 109,1 ≤ m ≤ 109)
输出描述:
对于每组输入,输出一个正整数,为n和m的最大公约数与最小公倍数之和。
示例1
输入:
10 20
输出:
30
示例2
输入:
15 20
输出:
65
#include <stdio.h>
/*
int main()
{
long long n = 0;
long long m = 0;
scanf("%lld %lld", &n, &m);
long long max = n > m ? m : n; //假设n和m的较小值为最大公约数
long long min = n > m ? n : m; //假设n和m的较大值为最小公倍数
while (1)
{
if (n % max == 0 && m % max == 0)
{
break;
}
max--;
}
while (1)
{
if (min % n == 0 && min % m == 0)
{
break;
}
min++;
}
printf("%lld\n", max + min);
return 0;
}
*/
/*
int main()
{
long long n = 0;
long long m = 0;
scanf("%lld %lld", &n, &m);
long long n2 = n;
long long m2 = m;
long long c = 0;
while (c = m2 % n2)
{
m2 = n2;
n2 = c;
}
long long min = m * n / n2;
long long sum = min + n2;
printf("%lld", sum);
return 0;
}
*/
//辗转相除法
int main()
{
long long n = 0;
long long m = 0;
scanf("%lld %lld", &n, &m);
long long tmp = 0;
long long max = 0;
long long min = 0;
long long n2 = n;
long long m2 = m;
//24 % 18 = 6
//18 % 6 = 0
while (tmp=n%m)
{
n = m;
m = tmp;
}
max = m;
//最小公倍数= n*m/max
min = n2*m2/max;
printf("%lld\n", max+min);
return 0;
}
BC116 小乐乐改数字
描述
小乐乐喜欢数字,尤其喜欢0和1。他现在得到了一个数,想把每位的数变成0或1。如果某一位是奇数,就把它变成1,如果是偶数,那么就把它变成0。请你回答他最后得到的数是多少。
输入描述:
输入包含一个整数n (0 ≤ n ≤ 109)
输出描述:
输出一个整数,即小乐乐修改后得到的数字。
示例1
输入:
222222
输出:
0
示例2
输入:
123
输出:
101
#include <stdio.h>
int main()
{
int n = 0;
int i = 0;
int sum = 0;
scanf("%d", &n);
while(n)
{
int m = n%10;
if(m%2 ==1) //奇数 变1
m=1;
else
m=0;
sum += m*pow(10, i++); //个位乘10^0 百位乘20^2
n /= 10;
}
printf("%d\n", sum);
return 0;
}
BC117 小乐乐走台阶
描述
小乐乐上课需要走n阶台阶,因为他腿比较长,所以每次可以选择走一阶或者走两阶,那么他一共有多少种走法?
输入描述:
输入包含一个整数n (1 ≤ n ≤ 30)
输出描述:
输出一个整数,即小乐乐可以走的方法数。
示例1
输入:
2
输出:
2
示例2
输入:
10
输出:
89
#include <stdio.h>
int Fib(int n)
{
if(n<=2)
return n;
else
return Fib(n-1) + Fib(n-2);
}
int main()
{
int n = 0;
scanf("%d", &n);
int ret = Fib(n);
printf("%d\n", ret);
return 0;
}
BC118 小乐乐与序列
描述
老师给了小乐乐一个正整数序列,要求小乐乐把这个序列去重后按从小到大排序。但是老师给出的序列太长了,小乐乐没办法耐心的去重并排序,请你帮助他。
输入描述:
第一行包含一个正整数n,表示老师给出的序列有n个数。接下来有n行,每行一个正整数k,为序列中每一个元素的值。(1 ≤ n ≤ 105,1 ≤ k ≤ n)
输出描述:
输出一行,为去重排序后的序列,每个数后面有一个空格。
示例1
输入:
4
2
2
1
1
输出:
1 2
示例2
输入:
5
5
4
3
2
1
输出:
1 2 3 4 5
#include <stdio.h>
int main()
{
int n = 0;
int arr[100001] = {0};
scanf("%d", &n);
int i = 0;
int tmp = 0;
for(i=0; i<n; i++)
{
//1 ≤ k ≤ n
//把每个数字放到对应数字的下标
scanf("%d", &tmp);
arr[tmp] = tmp;
}
for(i=0; i<n; i++)
{
if(arr[i] != 0)
{
printf("%d ", arr[i]);
}
}
return 0;
}
BC119 小乐乐与字符串
描述
在庆祝祖国母亲70华诞之际,老师给小乐乐出了一个问题。大家都知道China的英文缩写是CHN,那么给你一个字符串s,你需要做的是统计s中子串“CHN”的个数。
子串的定义:存在任意下标a < b < c,那么“s[a]s[b]s[c]”就构成s的一个子串。如“ABC”的子串有“A”、“B”、“C”、“AB”、“AC”、“BC”、“ABC”。
输入描述:
输入只包含大写字母的字符串s。(1 ≤ length ≤ 8000)
输出描述:
输出一个整数,为字符串s中字串“CHN”的数量。
示例1
输入:
CCHNCHN
输出:
7
示例2
输入:
CCHNCHNCHNCHN
输出:
30
#include <stdio.h>
int main()
{
char arr[8000] = {0}; //CCHNCHN
scanf("%s", arr);
//统计子串CHN的个数
long long c = 0;
long long ch = 0;
int chn = 0;
char *p = arr;
while(*p)
{
if(*p == 'C')
c++;
else if(*p == 'H')
ch += c;
else if(*p == 'N')
chn += ch;
p++;
}
printf("%lld\n", chn);
return 0;
}