C语言问题求解,在线等,急!!!
发布网友
发布时间:2022-10-04 16:24
我来回答
共3个回答
热心网友
时间:2023-10-14 23:03
思路:
1、根据题意每天从区间1~N中,依次深度-1,遇到某个深度0时停止作业,所修改的区间就是当日作业区间。
2、独立函数实现一天作业(workForDay)。参数flag为1显示作业过程,如不需要传0。
3、init函数为输入并返回动态数组。
#include <stdio.h>
#include <malloc.h>
int len=0;//路面长度
int *init();//根据输入初始化深度数组,成功返回地址,失败返回NULL
int workForDay(int *dps,int flag);//执行一天填充作业。成功作业返回1,无需作业返回0, 异常返回-1
//flag=1,打印输出作业过程。flag=0,不打印过程
int main()
{
int day=0,re,*dps=NULL;
dps=init();
if(!dps) return 1;
while((re=workForDay(dps,1))==1)
day++;
if(re==-1) return 1;
printf("共作业%d天\n",day);
free(dps);dps=NULL;//在本程序可不释放,但如果多次调用init函数,每次用完数组,需这样释放内存。
return 0;
}
int *init()
{
int i,*dps=NULL;//dps每单位长度对应深度
len=0;
while(len<=0) scanf("%d",&len);//长度必须大于0整数
dps=(int *)malloc(sizeof(int)*len);
if(!dps) return NULL;
for(i=0;(dps[i]=-1) && i<len;i++)
while(dps[i]<0) scanf("%d",&dps[i]);//每个深度必须大于等于0整数
return dps;
}
int workForDay(int *dps,int flag)
{
int i,bn=-1,an=-1;
if(!dps) return -1;
for(i=0;i<len;i++)
{
if(bn==-1 && dps[i]>0)
bn=i+1,an=bn,dps[i]--;
else if(bn!=-1 && dps[i]>0)
an=i+1,dps[i]--;
else if(bn!=-1 && dps[i]==0)
break;
}
if(bn==-1) return 0;
if(flag) printf("当日作业区间为[%d,%d]\n",bn,an);
return 1;
}
热心网友
时间:2023-10-14 23:03
//这应该是用贪心,我以前好像写过这个题,好像是洛谷的题
#include<stdio.h>
#define N 100010
int a[N];
int main() {
int n;
scanf("%d", &n);
for (int i = 0; i < n; i++)
scanf("%d", &a[i]);
long long sum = a[0];
for (int i = 1; i < n; i++) {
if (a[i] > a[i - 1]) {
sum += a[i] - a[i - 1];
}
}
printf("%lld", sum);
return 0;
}
热心网友
时间:2023-10-14 23:04
#include <stdio.h>
#include<stdlib.h>
#include <malloc.h>
#pragma warning(disable:4996)
unsigned int len = 1;//路面长度
unsigned int day = 0;
void init(unsigned int* dps);//根据输入初始化深度数组,成功返回地址,失败返回NULL
int workForDay(unsigned int* dps, int flag);//执行一天填充作业。成功作业返回1,无需作业返回0, 异常返回-1
//flag=1,打印输出作业过程。flag=0,不打印过程
int main()
{
unsigned int re, * dps = NULL;
scanf("%u", &len);//长度必须大于0整数
dps = (unsigned int*)malloc(sizeof(unsigned int) * len);
init(dps);
while ((re = workForDay(dps, 1)) == 1)
day++;
if (re == -1) return 1;
printf("共作业%u天\n", day);
free(dps);
dps = NULL;//在本程序可不释放,但如果多次调用init函数,每次用完数组,需这样释放内存。
return 0;
}
void init(unsigned int* dps )
{
unsigned int i;
for (i = 0; i < len; i++)
{
scanf("%u", &dps[i]);//每个深度必须大于等于0整数
}
}
int workForDay(unsigned int* dps, int flag)
{
unsigned int i;
int bn = -1, an = -1;
if (!dps) return -1;
for (i = 0; i < len; i++)
{
if (bn == -1 && dps[i] > 0)
{
bn = i + 1;
an = bn;
dps[i]--;
}
else if (bn != -1 && dps[i] > 0)
{
an = i + 1;
dps[i]--;
}
else if (bn != -1 && dps[i] == 0)
break;
}
if (bn == -1) return 0;
if (flag) printf("第%u日作业区间为[%d,%d]\n",day+1, bn, an);
return 1;
}
C语言问题求解,在线等,急!!!
1、根据题意每天从区间1~N中,依次深度-1,遇到某个深度0时停止作业,所修改的区间就是当日作业区间。2、独立函数实现一天作业(workForDay)。参数flag为1显示作业过程,如不需要传0。3、init函数为输入并返回动态数组。include <stdio.h> include <malloc.h> int len=0;//路面长度 int *init(...
C语言编程题求解!在线等!!!
include<math.h> int main(){ double a,b,c;double x1,x2,t;printf("请输入系数a,b,c\n");scanf("%lf%lf%lf",&a,&b,&c);t=sqrt(b*b-4*a*c);if(t<0)printf("无实数根\n");else { x1=(-b+t)/(2.0*a);x2=(-b-t)/(2.0*a);printf("x1=%.2lf,x2=%.2...
请教几个简单的C语言问题!急!在线等!
3.4f表示按宽度为3精度为4的单精度浮点型输出。%05d或%.5d表示按宽度为5的整型输出,实际位数少于定义的宽度则在前面补以0。printf("%03d",34)编译运行输出结果为034 其中的0不是针对8进制数,而是表示实际位数少于定义的宽度则在前面补以0。对于单双精度实数%0n1.n2f等同于%n1.n2f.2、pr...
C语言作业编程题 谁帮我下 在线等 !!! (用for语句编写)
for(c=1;c<=a;c++)printf("*");printf("\n");} } } 第四种 随便输入菱形 include<stdio.h> void main(){ int a,b,c,d;scanf("%d",&b); //输入中轴线上要显示*号的个数 if(b%2==0) //如果输入的数字是偶数,则无法输出菱形,因此程序应提示错误。printf("\n错\n"...
C语言编程求解在线等。谢谢。
{ bool brkflag = true;while (brkflag){ string strin;cout<<"输入:"<<endl;cin>>strin;//cout<<strin<<endl;double fstnum = 0;char flg = '+';double secnum = 0;double ret = 0;//解析输入 int ictn = strlen(strin.c_str());for (int i = 0; i < ictn; i++){ if...
几道C语言的入门问题,给过程,在线等
1、C A选项表示8进制的1;B选项表示十六进制的1;C选项错误,0开头的表示八进制的整数常量,范围是0-7,08显然超过了8进制的表示范围;D选项表示十进制的8;2、B f表示单精度,不写的话默认都是双精度;3、0X10;两个十六进制的数进行按位与运算,首先把两个十六进制数化成二进制OX14:0010 ...
C语言编程题求解!求大神助!在线等!
include <stdio.h> int main(void) { char *s = "***";for (int i = 7; i >= 4; i--)printf("%*s\n", i, s);return 0;} include <stdio.h> int main(void) { for (int n = 0; n < 4; n++) { for (int i = 0; i < n; i++)putchar(' ');for (int ...
急!!!在线等!!!求c语言大神,程序别变得太高级,基础的就好,蟹蟹
void main(){ int i,j,k,money,count;printf("Please Enter Money:");scanf("%f",&money);if(i=0;i<=money/6;i++){ if(j=0;j<=money/5;j++){ if(k=0;k<=money/4;k++){ if(money==i*6+j*5*k*4){ count++;printf("%d. 6 yuan number is%d,5 yuan number is%d,...
C语言基础填空题,在线等,要详细步骤和解题思路?
1. 第一题 int i=1,j=0;while(i++<3){ j++; } 答案:j=2,i=4 解释:i++ 加号在i 后面,属于 后加加,就是先求表达式的结果,然后再加1.第1次循环:初始值i=1 j=0,表达式 i<3 计算结果为TRUE, 执行j++和i+1 ,执行结果: i=2,j=1 第2次循环:i=2, 表达式i<3 ...
C语言编程问题 紧急~在线等 谢谢~
float x1,x2,x3,x4,y1,y2,y3,y4;float k1,k2,b1,b2;printf("请输入分别输入四个点的坐标(x1 y1 x2 y2 x3 y3 x4 y4)\n");scanf("%f %f %f %f %f %f %f %f",&x1,&y1,&x2,&y2,&x3,&y3,&x4,&y4);if( x2 == x1){ if( x4 != x3)printf("两直线相交\n");el...