【编程札记】Problem 1143 - Part-time Job

本文分享了一道简单的编程题目,讲述了如何通过调整代码结构和优化数组使用来解决程序运行时出现的问题,最终实现了正确的输出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Description
Snoopy lost his wallet, but he is afraid to tell his family, so he decided to do a part-time job to earn money in weekends. He is selling 
washing machines in a big market, he will get p dollars by sold a washing machine, and the manager promised him that snoopy will get 
at least m dollars a day, it means that if snoopy didn't sold as many washing machines to get m dollars, the manager will pay him m dollars also. 

Now we told you the p and m, and the number of washing machines snoopy sold in a day, which we call it n, help snoopy to calculate 
how many dollars he can get. 
Input
  There are multiple test cases in the input file. Each line is a test case, there is three integers m, p, and n which are descript in the problem.
  Input is terminated by p = n = m = 0. ( 1 <= p, n, m <= 100 )
Output
  For each test case, output an integer that the payment snoopy can get in a single line.
Sample Input
20 5 3
20 5 5
0 0 0
Sample Output
20
25
该题非常简单,但是我在Dev C++上调试却总是出问题
编码如下:

#include<stdio.h>
#include<stdlib.h>
int cal_pay(int m,int p,int n){
    int tmp;
    tmp=p*n;
    if(tmp>m) return tmp;
    else return m;
    }
int main(){
    int m[20],p[20],n[20];//由于事先无法得知参数有几组,所以就假设最大为20
    int i=0;
    do{
    scanf("%d %d %d",&m[i],&p[i],&n[i]);
    i++;
    }
    while((m[i-1]!=0)||(p[i-1]!=0)||(n[i-1]!=0));
    int salary[i];
   
    for(int j=0;j<i-1;j++){
                     salary[j]=cal_pay(m[j],p[j],n[j]);
                     printf("%d\n",salary[j]);
                     }
return 0;
                     system("pause");
                     
                   
    }
此题出处 http://acm.whu.edu.cn/learn/problem/detail?problem_id=1143
编译没问题,执行,输入数据,黑框一闪而过,不显示结果,纠结很久,但是代码算法本身好像没有什么问题,隐约感觉自己肯能在某些地方犯了一个
隐蔽的或是很低级的错误。慢慢找,最后终于,最后两行写反了!!! return 0;和system("pause");调换顺序后,执行成功。于是submit,可是系统却
给一个Runtime Error(Segment Fault),系统结识:段错误,通常是栈溢出、非法指针访问(如越界)。整个代码里唯一让我不安的地方就是数组的长
度,我很莽撞地定义为20,于是改正如下:
#include<stdio.h>
#include<stdlib.h>
int cal_pay(int m,int p,int n){
    int tmp;
    tmp=p*n;
    if(tmp>m) return tmp;
    else return m;
    }
int main(){
    int m,p,n;
    int i=0;
    int salary[100];
    do{
    scanf("%d %d %d",&m,&p,&n);
    salary[i]=cal_pay(m,p,n);
    i++;
    }
    while((m!=0)||(p!=0)||(n!=0)); 
    for(int j=0;j<i-1;j++){
                    
                     printf("%d\n",salary[j]);
                     }
                     system("pause");
                     return 0;
          
    }
m经改正m,p,n都作为局部变量,避免了过多使用数组(随意定义长度的数组不一定够用),submit之后,AC了。
真是想不到,本以为10几分钟的题目居然栽在了小细节当中,虽然这个道理大家都懂,但是当它以一种出乎意料的方式出现在
自己面前时,依然让人印象深刻。我记得《showstopper》里有这么一句话:编程就是,不完美,就是灾难。

内容概要:本文详细介绍了扫描单分子定位显微镜(scanSMLM)技术及其在三维超分辨体积成像中的应用。scanSMLM通过电调透镜(ETL)实现快速轴向扫描,结合4f检测系统将不同焦平面的荧光信号聚焦到固定成像面,从而实现快速、大视场的三维超分辨成像。文章不仅涵盖了系统硬件的设计与实现,还提供了详细的软件代码实现,包括ETL控制、3D样本模拟、体积扫描、单分子定位、3D重建和分子聚类分析等功能。此外,文章还比较了循环扫描与常规扫描模式,展示了前者在光漂白效应上的优势,并通过荧光珠校准、肌动蛋白丝、线粒体网络和流感A病毒血凝素(HA)蛋白聚类的三维成像实验,验证了系统的性能和应用潜力。最后,文章深入探讨了HA蛋白聚类与病毒感染的关系,模拟了24小时内HA聚类的动态变化,提供了从分子到细胞尺度的多尺度分析能力。 适合人群:具备生物学、物理学或工程学背景,对超分辨显微成像技术感兴趣的科研人员,尤其是从事细胞生物学、病毒学或光学成像研究的科学家和技术人员。 使用场景及目标:①理解和掌握scanSMLM技术的工作原理及其在三维超分辨成像中的应用;②学习如何通过Python代码实现完整的scanSMLM系统,包括硬件控制、图像采集、3D重建和数据分析;③应用于单分子水平研究细胞内结构和动态过程,如病毒入侵机制、蛋白质聚类等。 其他说明:本文提供的代码不仅实现了scanSMLM系统的完整工作流程,还涵盖了多种超分辨成像技术的模拟和比较,如STED、GSDIM等。此外,文章还强调了系统在硬件改动小、成像速度快等方面的优势,为研究人员提供了从理论到实践的全面指导。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值