C语言编程题求代码,不会做啊

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言编程题求代码,不会做啊相关的知识,希望对你有一定的参考价值。

题目描述从键盘输入若干数据整数(零表示结束),统计出数据个数,以及最大值、最小值和平均值。
用一个函数实现数据输入的功能,其首部为:
int Input(int s[])
Input的参数为输入的数据,函数返回值大于0表示该行输入的数据个数,0表示输入结束。
用一个函数实现求最大值、最小值和平均值的功能,首部为:
void statistics(int n, int s[], int *max, int *min, float *avg)输入从键盘输入若干数据整数(零表示结束)输出统计出数据个数,以及最大值、最小值和平均值 样例输入1 2 3 4 5 0样例输出Num=5
Max=5
Min=1
Avg=3.000

 

一时半会儿没理解你这句话“函数返回值大于0表示该行输入的数据个数,0表示输入结束。”,只能写成这个样了,你稍微改改。

#include<stdio.h> 

int Input(int s[]) 

 int i=0;

    scanf("%d",&s[i]); 

    while(s[i++]!=0)

 

  scanf("%d",&s[i]); 

    

 s[i]='\\0';

 return *s;

 

void statistics(int n, int s[], int *max, int *min, float *avg)

 int i=0,j=0,temp,sum=0;

 temp=s[0];

 for(i=1;i<n;i++)

    if(s[i]>temp) temp=s[i];

 *max=temp;   

 temp=s[0];

 for(i=1;i<n;i++)

    if(s[i]<temp) temp=s[i];

    *min=temp;

    for(i=0;i<n;i++)

  sum+=s[i];

 *avg=(float(sum/(1.0*n)));

 

void main()   

 int num=0,max=0,min=0,data[100];

 float avg=NULL;

 printf("Input(0表示结束):\\n");

    Input(data);

 while(data[num]!='\\0')

  num++;

 statistics(num,data,&max,&min,&avg);

 printf("Num=%d\\nMax=%d\\nMin=%d\\nAvg=%.3f\\n",num,max,min,avg);

 

 

参考技术A 编程大赛的题么?自己想吧,多行输入,多行输出,0结束,编程大赛的破题追问

不是,就一道课后习题而已代码怎么写啊

追答

scanf接受输入,用一个变量存储数据就可以了
int tmp = 0;

while(1)
scanf(" %d", &tmp);
if (tmp == 0) break;

统计数据个数,明白了么,我只加了一个变量而已;
int tmp = 0;
int count = 0;
while(1)
scanf(" %d", &tmp);
if (tmp == 0) break;
count++;


求平均值,你要学会用最少的变量完成某个任务,就像下面这样,但是,你首先要保证不能使程序变得反复无常;
int tmp = 0;
int count = 0;
double avg = 0;
while(1)
scanf(" %d", &tmp);
if (tmp == 0) break;
count++;
avg += tmp;


avg /= count;
最大值最小值,你也只需要这样就行了;
int tmp = 0;
int count = 0;
int max = 0;
int min = 0;
double avg = 0;
while(1)
scanf(" %d", &tmp);
if (tmp == 0) break;
count++;
avg += tmp;
if (max tmp) min = tmp; /* 这里为什么要加else,想不出来去问老师*/

avg /= count;
行了,程序就这么简单,把它拾掇拾掇就OK了;
int func (double *avg, int *max, int *min)

int tmp = 0;
int count = 0;
*avg = 0; *max = 0; *min = 0;
while ( 1)
scanf(" %d", &tmp);
if (tmp == 0) break;
count++;
*avg += tmp;
if (*max tmp) *min = tmp;

*avg /= count;
return count;

主函数:
#include
int main (void)

int count, max, min;

double avg;

while (1)

count = func(&avg, &max, &min);
if (count == 0) break;

printf("%lf, %d, %d\n", avg, max, min);



return 0;

Codeforces Round #485 (Div. 2) C题求三元组(思维)

C. Three displays
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output

It is the middle of 2018 and Maria Stepanovna, who lives outside Krasnokamensk (a town in Zabaikalsky region), wants to rent three displays to highlight an important problem.

There are nn displays placed along a road, and the ii-th of them can display a text with font size sisi only. Maria Stepanovna wants to rent such three displays with indices i<j<ki<j<k that the font size increases if you move along the road in a particular direction. Namely, the condition si<sj<sksi<sj<sk should be held.

The rent cost is for the ii-th display is cici. Please determine the smallest cost Maria Stepanovna should pay.

Input

The first line contains a single integer nn (3n30003≤n≤3000) — the number of displays.

The second line contains nn integers s1,s2,,sns1,s2,…,sn (1si1091≤si≤109) — the font sizes on the displays in the order they stand along the road.

The third line contains nn integers c1,c2,,cnc1,c2,…,cn (1ci1081≤ci≤108) — the rent costs for each display.

Output

If there are no three displays that satisfy the criteria, print -1. Otherwise print a single integer — the minimum total rent cost of three displays with indices i<j<ki<j<k such that si<sj<sksi<sj<sk.

Examples
input
Copy
5
2 4 5 4 10
40 30 20 10 40
output
Copy
90
input
Copy
3
100 101 100
2 4 5
output
Copy
-1
input
Copy
10
1 2 3 4 5 6 7 8 9 10
10 13 11 14 15 12 13 13 18 13
output
Copy
33
Note

In the first example you can, for example, choose displays 11, 44 and 55, because s1<s4<s5s1<s4<s5 (2<4<102<4<10), and the rent cost is 40+10+40=9040+10+40=90.

In the second example you can‘t select a valid triple of indices, so the answer is -1.

 

 

题意:选三个数,要求:i<j<k 且a[i]<a[j]<a[k],要求选出来的三个数的权值最小

思路:开始总想的是贪心,二分啥啥啥的。。。结果仔细想了下,他的范围是3000, O(n^3)的时间复杂度肯定不行,O(n^2)就可以过

只要我预处理第三个数,在每个数这从后面找一个权值最小且大于它的数,以此来作为第三个数即可,后面只要枚举两个数即可

 

#include<cstdio>
#include<cmath>
#include<iostream>
#define ll long long
using namespace std;
ll a[5000],b[5000],dp[5000];
int main() {
    int n;
    scanf("%d",&n);
    for(int i=0;i<n;i++)
        scanf("%d",&a[i]);
    for(int i=0;i<n;i++)
        scanf("%d",&b[i]);
    for(int i=0;i<n;i++) 
    {
        ll mn=99999999999;
        for(int j=i+1;j<n;j++) {
            if(a[i]<a[j]) {
                mn=min(mn,b[j]);
            }
        }
        dp[i]=mn;
    }
    ll ans=999999999999;
    for(int i=0;i<n;i++)
    {
        for(int j=i+1;j<n;j++)
        {
            if(a[i]<a[j]) 
            {
                if(dp[j]!=99999999999)
                    ans=min(ans,b[i]+b[j]+dp[j]);
            }
        }
    }
    if(ans==999999999999) printf("-1\n");
    else cout<<ans<<endl;
}

总结:总的来说这次cf div2的题目不是很难,只是自己刷提还是刷的太少了,没想到思路就卡到了,训练太少,刷题太慢,需要好好反省

 

以上是关于C语言编程题求代码,不会做啊的主要内容,如果未能解决你的问题,请参考以下文章

C语言入门题求答案:设所有变量均为int类型,则表达式(a=5,b=6,++a,b--,a+b)的

求高手,两道c语言编写题

c语言怎么启动vbs脚本不弹出黑窗口呢,跪谢?

C语言中素数的判断方法

[C语言]学习之路

c语言 输入10个学生5门功课成绩求:1每个学生的平均分;2每门功课的平均分;3计算平均方差