概述
目录
- 题目1:
- 题目2:
- 回答:
题目1:
/*
* @Descripttion:
* @version:
* @Author: Arabrast
* @Date: 2020-02-22 18:45:19
* @LastEditors: Arabrast
* @LastEditTime: 2020-02-23 17:09:59
* @Abrastact: 思考题:题目1
*
*题目1(必要的存储量):数组可以用来保存很多数据,但在一些情况下,并不需要把
数据保存下来。下面哪些题目可以不借助数组,哪些必须借助数组?请编程实现。假设输入
只能读一遍。
输入一些数,统计个数。
输入一些数,求最大值、最小值和平均数。
输入一些数,哪两个数最接近。
输入一些数,求第二大的值。
输入一些数,求它们的方差。
输入一些数,统计不超过平均数的个数。
*/
#include <stdio.h>
#include<iostream>
#include<math.h>
using namespace std;
void num1()
{
int i=0;
int x;
while(scanf("d",&x)!=EOF)
{
i++;
/*
if(x=='n')
{
break;
}
else
{
++i;
}*/
}
cout<<i<<endl;
}
void num2()
{
int max,min,avg,sum=0;
int flag=1;
int n;
int x;
while(1==scanf("%d",&n))
{
if(flag==1)
{
max=min=n;
flag=0;
}
if(max<n)
{
max=n;
}
if(min>n)
{
min=n;
}
sum+=n;
x++;
}
avg=sum/x;
printf("min is %d,max is %d,average is %d",min,max,avg) ;
}
void num3()
{
int nums[100],i=0;
while(1==scanf("%d",&nums[i]))
{
i++;
}
int x,y;
int temp;
int a=nums[0],b=nums[1];
int distance=a-b;
for(x=0;x<i;x++)
{
for(y=x+1;y<i;y++)
{
if(abs(nums[x]-nums[y])<distance)
{
distance=abs(nums[x]-nums[y]);
a=nums[x];
b=nums[y];
}
}
}
printf("%d and %d",a,b);
}
void num4()
{
int max,secondmax,n;
scanf("%d%d",&max,&secondmax);
int t1=max>secondmax ? max:secondmax;
int t2=max<secondmax ? max:secondmax;
max=t1;
secondmax=t2;
while(1==scanf("%d",&n))
{
if(n>max)
{
secondmax=max;
max=n;
continue;
}
if(n>secondmax &&n!=max)
{
secondmax=n;
}
}
printf("max=%d,secondmax=%d",max,secondmax);
}
void num41()
{
int i=0;
int nums[100];
while(1==scanf("%d",&nums[i]))
{
++i;
}
int x,y;
for(x=0;x<i;x++)
{
for(y=x+1;y<i;y++)
{
if(nums[x]>nums[x+1])
{
int temp=nums[x+1];
nums[x+1]=nums[x];
nums[x]=temp;
}
}
}
printf("%d",nums[i-2]);
}
void num5()
{
int nums[100];
int ct=0,n,i;
double ave=0.0,sum=0.0,psum=0.0;
while(1==scanf("%d",&n))
{
nums[ct++]=n;
sum+=n;
}
ave=sum/ct;
for(i=0;i<ct;i++)
{
psum+=pow((nums[i]-ave),2);
}
psum/=ct;
printf("variance:%.3fn",psum);
}
void num6()
{
int nums[100];
int ct=0,n,i;
int sct=0;
double ave=0.0,sum=0.0;
while(1==scanf("%d",&n))
{
nums[ct++]==n;
sum+=n;
}
ave=sum/ct;
for(i=0;i<ct;i++)
{
if(nums[i]<ave)
{
sct++;
}
}
printf("%d numbers smaller than average %fn",sct,ave);
}
int main()
{
// num1();
// num2();
// num3();
// num41();
// num5();
num6();
}
题目2:
/*
* @Descripttion:
* @version:
* @Author: Arabrast
* @Date: 2020-02-29 18:41:29
* @LastEditors: Arabrast
* @LastEditTime: 2020-02-29 18:43:29
* @Abrastact: 题目2(统计字符1的个数):
* 下面的程序意图在于统计字符串中字符1的个数,可惜有
瑕疵:
#include<stdio.h>
#define maxn 10000000 + 10
int main() {
char s[maxn];
scanf("%s", s);
int tot = 0;
for(int i = 0; i < strlen(s); i++)
if(s[i] == 1) tot++;
printf("%dn", tot);
}
该程序至少有3个问题,其中一个导致程序无法运行,另一个导致结果不正确,还有一
个导致效率低下。你能找到它们并改正吗?
*/
#include <stdio.h>
#include<string.h>
#define maxn 1000000+10
int main()
{
char s[maxn];
scanf("%s",s);
int tot=0;
int n=strlen(s);
for (int i=0;i<n;i++)
{
if (s[i]== '1')
tot++;
}
printf("%dn",tot);
}
回答:
- 引用string.h
- s是’char’型, 而原来的1是’int’型
- strlen(i)多进行了一次遍历.
最后
以上就是伶俐苗条为你收集整理的算法竞赛入门经典:第三章思考题题目1:题目2:的全部内容,希望文章能够帮你解决算法竞赛入门经典:第三章思考题题目1:题目2:所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复