算法竞赛入门经典-第五章6174问题
来源:互联网 发布:贵阳广电网络公司地址 编辑:程序博客网 时间:2024/05/19 04:04
#include<string.h>
int a, b, n;
char s[10];
sprintf(s, "%d", x);//输出输入进来的数字
n = strlen(s);
for(int i = 0; i < n; i++)
for(int j = i+1; j < n; j++)
if(s[i] > s[j]) {
char t = s[i]; s[i] = s[j]; s[j] = t;
}
sscanf(s, "%d", &b);//输出冒泡排序拍好的由小到大的数
for(int i = 0; i < n/2; i++) {
char t = s[i]; s[i] = s[n-1-i]; s[n-1-i] = t;
}//输出由大到小的数
sscanf(s, "%d", &a);//sscanf在这里承担格式转换功能
return a - b;
}
int num[2000], count;//num[2000]用来存储路径上的每一个数字
int main() {
scanf("%d", &num[0]);
printf("%d", num[0]);
count = 1;
for(;;) {
num[count] = get_next(num[count-1]);
printf(" -> %d", num[count]);
int found = 0;
for(int i = 0; i < count; i++)
if(num[i] == num[count]) { found = 1; break; }
if(found) break;//
count++;
}
printf("\n");
return 0;
}
//for(int i = 0; i < count; i++)
// if(num[i] == num[count]) { found = 1; break; }
//出现相同的值就退出:因为在6174之前如果有相同的值那就会陷入死循环
//不符合题意且不可能存在
//所以用是否出现相同的值代替是否是6174进行判断
//如果是我写-利用判断是否是6174作为退出条件
#include<stdio.h>
int high[4],low[4];
void change_into_array(int n)
{
high[0]=n/1000;
high[1]=n%1000/100;
high[2]=n%1000%100/10;
high[3]=n%1000%100%10;
}
void set_in_order()
{
int i,j,t;
for(i=0;i<3;i++)
{
for(j=0;j<3-i;j++)
{
if(high[i]<high[j])
{
t=high[i];
high[i]=high[j];
high[j]=t;
}
}
}
for(i=0;i<4;i++)
low[i]=high[3-i];
}
int result()
{
int c,b;
c=high[0]*1000+high[1]*100+high[2]*10+high[3];
b=low[0]*1000+low[1]*100+low[2]*10+low[3];
return c-b;
}
int main()
{
int n,a;
scanf("%d",&n);
while(a!=6174)
{
change_into_array(n);
set_in_order();
a=n;
printf("%d->",a);
a=result();
}
}
//方法二显然耗费内存较多,效率底下...
//其实两个方法思路相同,步骤也大致相同,不同的是判断条件不一样
//有些题目有隐性判断条件 找出来省事
//还有一个改进版虽然也没改进到哪里去,而且这个在某些测试点下是段错误
#include<stdio.h>//段错误-内存 时间
int in[4];
void put(int num)
{
in[0] = num / 1000;
in[1] = (num % 1000) / 100;
in[2] = (num % 1000 % 100) / 10;
in[3] = num % 1000 % 10 % 10;
}
int main()
{
int i, j, sum1, sum2, t, n;
int high[4];
scanf_s("%d", &n);
put(n);
do
{
for (i = 0; i<3; i++)
for (j = 0; j<3 - i; j++)
{
if (in[j]<in[j + 1])
{
t = in[j];
in[j] = in[j + 1];
in[j + 1] = t;
}
}
for (i = 0; i<4; i++)
high[i] = in[i];
sum1 = (high[0] * 1000 + high[1] * 100 + high[2] * 10 + high[3]);
sum2 = (high[3] * 1000 + high[2] * 100 + high[1] * 10 + high[0]);
put(sum1 - sum2);
printf("%d%d%d%d-%d%d%d%d=%d%d%d%d\n", high[0], high[1], high[2], high[3], high[3], high[2], high[1], high[0], in[0], in[1], in[2], in[3]);
if (in[0] == 0 && in[1] == 0 && in[2] == 0 && in[3] == 0)
break;
} while (in[0] * 1000 + in[1] * 100 + in[2] * 10 + in[3] != 6174);
return 0;
}//有输出格式的要求所以才用四位
//pat-basic level
有没有更方便的解法.....
c++的类??
等我回来试试.....
- 算法竞赛入门经典-第五章6174问题
- 算法竞赛入门经典 第五章 6174
- 算法竞赛入门经典 第五章 字符串
- 算法竞赛入门经典-第五章源代码
- 算法竞赛入门经典第五章
- 算法竞赛入门经典第五章习题
- 算法竞赛入门经典第五章习题
- 算法竞赛入门经典:第五章 基础题目选解 5.7 6174问题
- 《算法竞赛入门经典》 第五章 基础题目选解
- 算法竞赛入门经典 第五章 字母重排
- 算法竞赛入门经典 第五章 因子和阶乘
- 算法竞赛入门经典(第一版) 第五章 解题报告
- 算法竞赛入门经典-第五章错位输出
- 算法竞赛入门经典-第五章TEX括号
- 算法竞赛入门经典-第五章周期串
- 算法竞赛入门经典-第五章小学生算术
- 算法竞赛经典入门-第五章阶乘的精确值
- 算法竞赛入门经典-第五章字母重排
- 【Java学习之代码学习】 Prog18_分数序列问题
- 【Java学习之代码学习】 Prog05_素数个数的问题
- Spark DataFrames入门指南:创建和操作DataFrame
- iOS 分享 sharesdk集成
- 【Java学习之代码学习】 Prog02_猴子吃桃问题
- 算法竞赛入门经典-第五章6174问题
- word2vec中的bin文件转换为txt 文件
- 如何有效提高GRE阅读水平
- 如何优化你的JS代码
- 14章 上机3-5
- Python下opencv图像的几何变换
- 【计算机视觉】一步一步实现人脸或特定物体的跟踪(1)——利用CamShift来跟踪
- java爬虫案例--webmagic
- 用户登录后,往session中插入的“userDetail”即用户信息,专业属于叫什么?