快速提升代码能力(9)

原创 2018年04月14日 23:17:00

从零起步看算法(第九天 4.14)

//q10  回文数

1.明天有英语竞赛,今天的题做的有的浮躁。本以为是道水题,做下去发现要学的东西还是很多的

先贴自己的代码,有几个问题很麻烦,首先是加过之后的进位,数字转换为字符,字符转换为数字,最后的输出格式也很迷,等待以后的编改。

 //q10回文数
#include<cstdlib>
#include<cstdio>
#include<stdio.h>
#include<string>
#include<cstring>
#include<iostream> 
#include<assert.h>
#include<cmath>
#include<algorithm>
using namespace std;

int de_num(char x[],int num){
	int sum=0;
	for(int i=0;i<num;i++){
	   int k=0;
		while(k<i){
		x[i]=(x[i]+'0')*10;
		k++;
		}
		sum=sum+(x[i]+'0');
	}
	return sum;
}

void fun(char x[],int y){
	int count=y; 
	int len=strlen(x);
	
	if(x[0]==x[len-1]){
		cout<<count<<endl;
		cout<<x<<endl;
		return;
	}
	else
	{
		int x1=de_num(x,len);
		
	    char temple;
		temple=x[0];
		x[0]=x[len-1];
		x[len-1]=temple;
		
		x1+=de_num(x,len);
		cout<<x1<<"--->";
		sprintf(x,"%d",x1);
		count++;
		fun(x,count); 
	}
}

int main(){
	int n;
	char s[256]={0};
	while (cin>>n){
		assert(n>=0);
		sprintf(s,"%d",n);
		fun(s,0);
	}
	return 0;
}
 
 
 

/*
char s[256]={0};

int is_zhuan(int x,string a){
	int y=0;
		for(int i=0;i<a.size();i++){
		if(x!=0){		
		a[i]=(x%10)+'0';
		x=x/10;
	     }
	}
	//转换 
	char temple;
	temple=a[0];
	a[0]=a[a.size()];
	a[a.size()]=temple;
	
	for(int j=0;j<a.size();j++){

	return y;
	
} 


bool is_hui(int x,string a){
	for(int i=0;i<a.size();i++){
		if(x!=0){		
		a[i]=(x%10)+'0';
		x=x/10;
	}
	}
	if(a[0]==a[a.size()])
	return true;
}

void fun(int x,string a,int count){
	int y;
	y=is_zhuan(x,a);
	
	if(is_hui(x,a)){
	cout<<count<<endl;
	cout<<s;
	cout<<x<<endl;		
	}
	else {
			sprintf(s,%s,"x--->");
			return fun(x+y,a,count++);
	}

}
*/
 

接下来是AC 版

https://blog.csdn.net/jkl46607/article/details/79619721

版本一:

#include <iostream>  
#include <cmath>  
using namespace std;  
   
bool judge(int n)  
{  
    int a[1000];  
    int i;      //位数   
    for(i = 0; n; i++){  
        a[i]=n%10;  
        n/=10;  
    }  
    if(i%2==0){     //  为偶数  
        int sum=0;  
        int q=i;    //  判断是不是回文的   
        int l=i/2;  
        int k=l-1;  //    
        int flag=l;  
        while(l--){  
        if(a[flag++]==a[k--])   
            sum++;        
        }  
        if(sum==q/2)  
        return true;  
        else  
        return false;     
    }     
    if(i%2!=0){//为奇数   
        int sum=0;  
        int q = i/2-1;  
        int l = i/2;  
        int k = l;  
        int flag = q+2;  
        while(l--){  
            if(a[q--]==a[flag++])  
            sum++;  
        }   
        if(sum==k)  
        return true;  
        else  
        return false;  
    }     
}  
  
int change(int n){  
    int flag = n;  
    int b[1000];  
    int i,m=0;  
    for( i = 0; n; i++){  
        b[i]=n%10;  
        n/=10;  
    }  
    int j =i-1;  
    for(int k=0; k<i; k++,j--){  
        m+=b[k]*pow(10,j);  
    }  
    return flag+m;  
}  
  
int main()  
{  
      
    int n,ans=0;  
    int ac[1000];  
    cin>>n;  
    int flag = n;  
    while(!judge(n)){  
        n=change(n);   
        ans++;  
    }  
    cout<<ans<<endl;  
    if(!judge(flag)){  
        cout<<flag;   
    }  
    while(!judge(flag)){  
        flag=change(flag);   
        cout<<"--->"<<flag;  
    }  
      
    return 0;  
}  

版本2:

需要学习vector的使用,感觉vector很有用。

#include <iostream>  
#include <vector>  
#include <assert.h>  
  
using namespace std;  
  
vector <int> ans;  
int rev(int x) {  
    int res = 0;  
    while(x) {  
        res = res * 10 + x % 10;  
        x /= 10;  
    }  
    return res;  
}  
  
int main() {  
    int n;  
    while(cin>>n) {  
        ans.clear();  
        ans.push_back(n);  
        int temp = rev(n);  
        while(temp != n) {  
            n += temp;  
            ans.push_back(n);  
            temp = rev(n);  
            assert(n > 0);  
        }  
        cout<< ans.size() - 1 << endl;  
        cout<< ans[0];  
        for(int i =1; i < ans.size(); ++i) {  
            cout<< "--->" << ans[i];  
        }  
        cout<<endl;  
    }  
    return 0;  
}  
https://blog.csdn.net/ac_gibson/article/details/43156615

微信运营方法技巧与提升

针对技术想学习或了解运营的同学设计
  • 2017年03月06日 14:40

程序员自我修练-提高写代码的能力

首先让我们看一看刚入软件公司会出现的情况: 1. 你可能会常常发现,写了一段代码后,编译程序时是一大堆的出错 (原因:语法不熟) ──别担心,这是每个程序员必须经历的事,这时候你就需要更大...
  • jcw_275240222
  • jcw_275240222
  • 2016-06-11 17:44:56
  • 3721

如何提升你的能力?给年轻程序猿的几条建议

一转眼工作已有8年,前两天公司一位初入职场的同事希望我给一些建议与经验。我觉得这个话题很有价值,这里以个人的想法与经历写成此文,希望给年轻的开发者们一些启发。 我工作过的公司有4家,...
  • DSLZTX
  • DSLZTX
  • 2015-06-23 11:54:18
  • 2534

快速提升代码能力(7)

从零起步看算法(第七天 4.12)//q9 交叉排序算是一道水题了。1.花点时间看一下样例,就可以理解题意了。2.本题唯一知识点,用sort()实现,数组的从大到小排序。很简单的操作https://b...
  • weixin_41637364
  • weixin_41637364
  • 2018-04-12 23:14:02
  • 3

快速提升代码能力(3)

从零起步看算法 (第三天 4.8)//q4 求最大子阵一.开始理解错了题目意思,简单的想成了行的一维,变换起始点的最大值。错误的路上,看到了一些不一样的风景。比如:1.起始点变化的总结,双重循环的初始...
  • weixin_41637364
  • weixin_41637364
  • 2018-04-08 21:03:07
  • 2

快速提升代码能力(5)

从零起步看算法(第五天 4.10)//q7 A*B本题重点:大数乘法1.一开始以为和大数加法相似,最后发现有很多不同,就当练习大数加法了。#include&amp;lt;stdio.h&amp;gt;...
  • weixin_41637364
  • weixin_41637364
  • 2018-04-10 23:53:23
  • 4

快速提升代码能力(12)

从零起步看算法(第十二天 4.17)题外话:昨晚想了一些其他的事,有些生活的残酷你注定要去旁观,而无法避免。伤害,或许是一种宿命,你能做的就是让悲痛成为财富而已。//q13  HZF 爱斗牛思路很简单...
  • weixin_41637364
  • weixin_41637364
  • 2018-04-17 18:25:36
  • 4

提升 C++ 技能的 7 种方法

原文地址:http://blog.jobbole.com/112246/ 夏天时常会谈到大海、太阳、沙滩、大山或者你的家庭住宅。更充裕的时间也是夏天带来的好处之一。可能是因为你在休假,也可能是因...
  • qq_35733305
  • qq_35733305
  • 2017-10-17 13:56:03
  • 503

快速提升代码能力(10)

从零起步看算法(第十天  4.15)看点评,总结模拟这一套路的使用进制转换,回文数,机器人的坐标为模拟情况的套路//q11 机器人坐标一开始没有读清楚题意,把问题想简单了。1.本题重点:坐标问题---...
  • weixin_41637364
  • weixin_41637364
  • 2018-04-15 23:15:09
  • 4

快速提升代码能力(14)

从零起步看算法(第14天 4.23)一条咸鱼,该了几天之后又回来了。写给自己:1.想得多,不如脚踏实地的干点事情。                 2.还是要让自己的节奏快起来,紧起来,管好自己,不进...
  • weixin_41637364
  • weixin_41637364
  • 2018-04-23 22:56:04
  • 0
收藏助手
不良信息举报
您举报文章:快速提升代码能力(9)
举报原因:
原因补充:

(最多只允许输入30个字)