每日编程中遇到任何疑问、意见、建议请公众号留言或加入每日编程群聊739635399
求众数。众数就是一个序列中出现次数最多的数字。如果不唯一,则输出小的那个值。给定第一个代表有几个数字。1<=n<=10^5,每个数字在 int 范围内。
输入样例:
8
10 3 8 8 3 2 2 2
输出样例:
2
解决方法:
(1)代码实现:
#include
int main()
{
/*首先将数字输入到一个数组里面*/
int m;
printf("请输入数字的个数:");
scanf("%d", &m);
printf("请输入数字:");
int n[100];
int i = 0;
while (i < m)
{
scanf("%d", &n[i]);
++i;
}
/*计算出每个数字是第几次出现,用另外的数组将这些次数存储*/
int j = 0;
int cs = 0;
int k[100] = {0};
for (i = 0; i < m; ++i)
{
cs = 1;
for (j = 0; j < i; ++j)
{
if (n[j] == n[i])
{
cs++;
}
}
k[i] = cs;
}
/*找出数组k中的最大值,也就是出现最多的次数,以及下标位置*/
int max = 0, t = 0;
for (i = 0; i < m; ++i)
{
if (max <= k[i])
{
max = k[i];
t = i;
}
}
/*上一步找到了出现最多的次数,但是可能会出现有两个或多个数字都出
现这么多次的情况,所以要遍历数组k,找出所有的max*/
int p[m];
for (i = 0; i < m; ++i)
{
p[i] = -1;
}
j = 0;
for (i = 0; i < m; ++i)
{
if (k[i] == max)
{
p[j] = i;
++j;
}
}
/*上面几行是找到出现最多次数的数字的下标,并存储在数组p中,下面几行是找到这些数字中最小的一个*/
int w[m];
j = 0;
while (p[j] != -1)
{
w[j] = n[p[j]];
++j;
}
int min = 1000;
for (i = 0; i < j; ++i)
{
if (min > w[i])
{
min = w[i];
}
}
printf("%d", min);
return 0;
}
解方程。给定一个字符串,代表一个一元一次方程。如果有解求解,输出格式“x=数字” ,如果解的个数无穷,输出 “infinite solutions”。如果没有解输出“no solution”
字符串长度不超过 256 。
输入格式:
输入一个一元一次方程,未知数用x表示。
输出格式:
输出 “x=数字” 或者 “infinite solutions”或者“no solution”
输入样例:
10x-2x-8=4x+7+x
输出样例:
x=5