20240324
A. 买书
#include<bits/stdc++.h>
using namespace std;
int main()
{
int m;
cin >> m;
cout << m / 13 << endl;
cout << m % 13 << endl;
return 0;
}
B. 做题
类似于斐波那契数列每项求和,唯一区别在于如果>=m了要停止计算。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a=0, b=0, m=0, n=0, ans=0, c=0;
scanf("%d%d%d%d", &a, &b, &m, &n);
ans = a+b;
for(int i=3; i<=n; i++)
{
c = a+b;
ans += c;
a = b;
b = c;
if(c>=m) break;
}
printf("%d\n", ans);
return 0;
}
C. 百鸡问题
枚举公鸡、母鸡分别买了几只,就能够通过钱数计算出小鸡买了几只,然后判断加起来是否==m即可。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int x, y, z, n, m, cnt = 0;
cin >> x >> y >> z >> n >> m;
for (int gj = 0; gj * x <= n && gj <= m; gj++)
for (int mj = 0; mj * y + gj * x <= n && mj + gj <= m; mj++)
{
int xj = (n - gj * x - mj * y) * z;
if (gj + mj + xj == m)
cnt++;
}
cout << cnt << endl;
return 0;
}
D. 数字变换
本质上是数位分解+角谷猜想。难点在于将这个三位数的三个数字重新排列,得到的最大的数,减去得到的最小的数。为了找到最大数和最小数,可以暴力枚举,可以排序等等,只要能够达到目的都可以。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n = 0;
cin >> n;
int t = 0;
while(1)
{
if (n == 495)
{
cout << t << endl;
break;
}
// 个位 十位 百位
int m0 = n % 10, m1 = n / 10 % 10, m2 = n / 100;
int tmax = 0, tmin = 0;
if (m0 >= m1 && m1 >= m2)
{
tmax = m0 * 100 + m1 * 10 + m2;
tmin = m2 * 100 + m1 * 10 + m0;
}
else if (m0 >= m2 && m2 >= m1)
{
tmax = m0 * 100 + m2 * 10 + m1;
tmin = m1 * 100 + m2 * 10 + m0;
}
else if (m1 >= m0 && m0 >= m2)
{
tmax = m1 * 100 + m0 * 10 + m2;
tmin = m2 * 100 + m0 * 10 + m1;
}
else if (m1 >= m2 && m2 >= m0)
{
tmax = m1 * 100 + m2 * 10 + m0;
tmin = m0 * 100 + m2 * 10 + m1;
}
else if (m2 >= m0 && m0 >= m1)
{
tmax = m2 * 100 + m0 * 10 + m1;
tmin = m1 * 100 + m0 * 10 + m2;
}
else // m2 >= m1 && m1 >= m0
{
tmax = m2 * 100 + m1 * 10 + m0;
tmin = m0 * 100 + m1 * 10 + m2;
}
n = tmax - tmin;
t++;
}
return 0;
}
E. X字矩阵
观察X字上每个点坐标的规律,可以发现,从左上往右下的斜线满足i==j
,从右上往左下的斜线满足i+j==n-1
(当坐标从0开始时)或i+j==n+1
(当坐标从1开始时),在枚举时用这个条件判断即可。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n = 0;
cin >> n;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
if (i == j || i + j == n - 1)
{
cout << "+";
}
else
{
cout << "-";
}
}
cout << endl;
}
return 0;
}