zoukankan      html  css  js  c++  java
  • 寒假作业2:解题思路

    解题思路

    Github的链接(https://github.com/MercuialC/object-oriented)

    题意理解:

    让我来翻一下题目。题目说输入两个数,然后将他们的和用一种规定的格式输出。这种格式也很常见,(取钱的时候见过吧)。(嗯,还是一道很平易近人的题目)

    解题的经历:

    做这道题,我换了两种思路,(嗯,很明显,第一条我认为比较规范的道路我没走通)
    先说说两种思路吧

    1. 我的第一种思路:先输入两个数然后设个字符型数组,嗯,求和完将这个和的每一个数字分别存入这个数组中的一个元素中,但是每三个就加一个逗号。
      代码如下:
    int main()
    {
    	int a,b,sum,i,j,d=1000000,e=1,f=0;
    	char c[20]={0};
    	scanf("%d%d",&a,&b);
    	sum=a+b;
    	for(;;)
    	{
    			d=(d/(e));
    			if(d==0)
    			{
    				break;
    			 } 
    			e=e*10;
    			j=(sum/(d));
    			 if(j!=0)
    			{
    
    				sum=(sum-j*(d));
    				for(;;)
    				{
    					d=(d/(e));
    					if(d==0)
    					{
    						break;
    					 } 
    					e=e*10;
    					j=(sum/(d));
    					if(f%3==0&&f!=0)
    					{
    						c[f]=',';
    						f=f+1;
    					}
    					c[f]=j;
    					f=f+1;
    					sum=(sum-j*(d));
    				}	
    			}	
    	}
    	for(i=0;i<f-1;i++)
    {
    		printf("%c",c[i]);
    }
    	return 0;
    }
    

    排错时通过不断地输出来检验有没有执行哪一条语句,然后判断前一过程的值有没有问题。
    排错图片

    嗯,然后我发现写错了,首先是我发现,我的思路都不能实现,输出会出现奇怪的字符。
    然后我就发现我想错了

    嗯,举个栗子。eg:输入10000 和1。设了c[]这个数组。然后和为10001就c[0]=1,c[1]=0,c[2]=0,c[3]=',',c[4]=0,c[5]=1。(没错,就是这样)
    2. 然后我就生气了(2333)我决定用愚蠢实用的方法快速解决它
    第二种思路简单粗暴(。。)嗯,我的思路是这样的:首先,a与b有最大值的限制(多好啊)所以他们的和最高(max)有2后面6个0,最低(min)有负2后面6个0!
    然后就好像很简单的样子,分情况讨论讨论,如果它大于4位数小于7位数用和来除1000得到的数就是逗号前的,(逗号后有3个0),嗯,然后再分具体几位数来看看到底要补全几个0.然后如果小于4位或等于7位再具体讨论一下(if语句是万能的)
    具体代码如下:

    int main()
    {
    	int a,b,i,j,k,l,sum;
    	scanf("%d%d",&a,&b);
    	sum=a+b;
    	if(sum<1000&&sum>=0)
    	{
    		printf("%d",sum);
    	}
    	else if(sum>=1000)
    	{
    		i=sum/1000;
    		j=sum-i*1000;
    		if(i<1000&&i>=100)
    		{
    		printf("%03d,%03d",i,j);
    		}
    		else if(i>=10&&i<100)
    		{
    		printf("%02d,%03d",i,j);
    		}
    		else if(i>=1000)
    		{
    			k=i/1000;
    			l=i-k*1000;
    			printf("%d,%03d,%03d",k,l,j);
    		}
    		else
    		{
    		printf("%d,%03d",i,j);
    		}
    	}
    	else if(sum<0)
    	{
    		if(sum>-1000)
    	{
    		printf("%d",sum);
    	}
    	else if(sum<=-1000)
    	{
    		i=sum/(-1000);
    		j=sum*(-1)-i*(1000);
    		if(i<1000&&i>=100)
    		{
    		printf("-%03d,%03d",i,j);
    		}
    		else if(i>=10&&i<100)
    		{
    		printf("-%02d,%03d",i,j);
    		}
    		else if(i>=1000)
    		{
    			k=i/1000;
    			l=i-k*1000;
    			printf("-%d,%03d,%03d",k,l,j);
    		}
    		else
    		{
    		printf("-%d,%03d",i,j);
    		}
    	}
    	}
    	return 0;
    }
    

    在调试的途中发现了一些问题,(就是讨论情况中的遗漏,毕竟方法比较笨)一个是一开始默认和也是>=-1000000&&<=1000000;然后比较暴力的处理了七位数的情况。后来发现了这一问题(因为网络当时没有所以修改过程没有截屏)。

    总结

    嗯,通过第二个思路,总结一种不断除整然后相减取某一位数的常见方式,也发现简单的思路有时候也很重要,然后第一个思路也会去想想完善完善的。附上提交记录

    (啊哈哈,第一次,失误失误)

  • 相关阅读:
    两台Mysql数据库数据同步实现
    利用Python读取外部数据文件
    在Python应用中使用MongoDB
    使用python语言操作MongoDB
    windows下Graphviz安装及入门教程
    【Machine Learning】决策树案例:基于python的商品购买能力预测系统
    Python数据可视化-seaborn
    np.tile 函数使用
    Python机器学习库scikit-learn实践
    基于C#net4.5websocket客户端与服务端
  • 原文地址:https://www.cnblogs.com/mercuialC/p/6354414.html
Copyright © 2011-2022 走看看