用C++写了一下(经测试暂无问题,如有问题,还请评论):
第一题:
#include <iostream>
using namespace std;
int main()
{
string s;
int flag=0,ans=0,i=0;
getline(cin,s);
while(s[i] != '\0')
{
if(s[i] == '*')
{
flag++;
}
if(s[i] == '@')
{
ans++;
}
i++;
}
cout<<"*出现了"<<flag<<"次;"<<endl;
cout<<"@出现了"<<ans<<"次."<<endl;
return 0;
}
第二题:
#include <iostream>
#include <iomanip>
using namespace std;
bool cmp(float a)
{
if(a-(int)a==0) //核心在此a-(int)a
return 0;
else return 1;
}
int main(){
/*
思路:先对数组元素排序,然后判断奇偶,找出中位数
*/
int n,a[1000],i,j,t;
double v; // 存放中位数
cin >> n;
for(i = 0 ; i < n ; i++){
cin >> a[i];
}
// 对数组元素按照小到大进行排序
for(i = 1 ; i < n ; i++){
for(j = 0 ; j <= n - i - j ; j++){
if(a[j] > a[j + 1]){
t = a[j];
a[j] = a[j + 1];
a[j + 1] = t;
}
}
}
// 得到中位数
if(n % 2 != 0){
v = a[n / 2];
}else{
v = (a[n / 2] + a[n / 2 - 1]) / 2.0;
}
if(cmp(v))
{
cout << fixed << setprecision(1) << v << endl;
}
else cout << v << endl;
}
如有帮助,还请采纳!谢谢!
用gets接收一行,逐个字符比较统计
#include <stdio.h>
int main()
{
char s[1001] = {0};
int a=0,b=0,i=0;
gets(s);
while(s[i] != '\0')
{
if(s[i] == '*')
a++;
else if(s[i] == '@')
b++;
i++;
}
printf("%d\n%d",a,b);
}
#include <stdio.h>
int main()
{
int a[1000] = {0};
int n,i,j,t;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0;i<n-1;i++)
for(j=0;j<n-i-1;j++)
{
if(a[j] > a[j+1])
{
t = a[j];
a[j] = a[j+1];
a[j+1] = t;
}
}
if(n%2==1)
printf("%d",a[(n+1)/2]);
else
{
t = a[n/2-1] + a[n/2];
if(t%2==0)
printf("%d",t/2);
else
printf("%.1f",t/2.0);
}
}