一些竞赛算法题目及解答(角谷步数,数组非排序正负数分离, 最小方差生成树)
来源:互联网 发布:电子鼓教学软件 编辑:程序博客网 时间:2024/04/30 03:18
1 角谷步数
你听说过角谷猜想吗?任意的正整数,比如 5, 我们从它开始,如下规则计算:如果是偶数,则除以2,如果是奇数,则乘以3再加1.如此循环,最终必会得到“1” !比如 5 的处理过程是:5168421一个正整数经过多少步才能变成1, 称为角谷步数。对于5而言,步数也是5对于1,步数为0本题的要求是,从标准输入给定一个整数n(1<n<300)表示角谷步数求满足这个角谷步数的最小的正整数例如:输入:3则输出:8输入:4则输出:16输入:7则输出:3
int ComputStep(unsigned int n){ int count=0; if(n==1) return 0; int nStep=0; while(n>1){ if(n%2==0) n=n/2; else n=n*3+1; nStep++; if(nStep>300) break; } return nStep;}int aStep[65005]={0};unsigned int GetFromStep(int nStep){unsigned int i=0;for(i=0;i<65005;i++){ if(aStep[i]==nStep) break;}return i;}main(){ unsigned int i=2; for(i=2;i<=65000;i++){ aStep[i] = ComputStep(i); printf("%d: %d\n",i,aStep[i]); } printf("%u\n",GetFromStep(10)); printf("%u\n",GetFromStep(20)); printf("%u\n",GetFromStep(100)); printf("%u\n",GetFromStep(290)); printf("%u\n",GetFromStep(298));}
2 不用排序算法分离数组中的负数,0和正数
#include <stdlib.h>#include <stdio.h>#define N 10int main(void){ int p=0,q=N-1,a[N]={2,-5,-89,75,0,-89,0,93,48,0}; int i,temp; while(p<=q){ if (a[p]<0) {p++;continue;} if (a[q]>0) {q--;continue;} if (a[p]>0&&a[q]<0){ temp=a[p]; a[p]=a[q]; a[q]=temp; p++; q--; continue; } if (a[p]==0){ // from p+1 to q, find a nege num for(i=p+1;i<=q;i++) if(a[i]<0){ temp=a[p]; a[p]=a[i]; a[i]=temp; break; } p++; continue; } if (a[q]==0){ for(i=q-1;i>=p;i--) if(a[i]>0){ temp=a[q]; a[q]=a[i]; a[i]=temp; break; } q--; continue; } } for(i=0;i<N;i++) printf("%4d",a[i]); system("pause");}
3 蓝桥杯模拟试题答案及简要说明
http://tieba.baidu.com/p/2244366307 有关于分酒问题的解答
4 最小方差生成树
输入格式
输入多组测试数据。第一行为N,M,依次是点数和边数。接下来M行,每行三个整数U,V,W,代表连接U,V的边,和权值W。保证图连通。n=m=0标志着测试文件的结束。
输出格式
对于每组数据,输出最小方差,四舍五入到0.01。输出格式按照样例。
样例输入
4 5
1 2 1
2 3 2
3 4 2
4 1 1
2 4 3
4 6
1 2 1
2 3 2
3 4 3
4 1 1
2 4 3
1 3 3
0 0
样例输出
Case 1: 0.22
Case 2: 0.00
数据规模与约定
1<=U,V<=N<=50,N-1<=M<=1000,0<=W<=50。数据不超过5组。
做法:枚举最小生成树可能的边权平均值,将边权设置为原边权减去平均值的平方,然后求最小生成树。
for 每一个n-1条边的组合 in 所有的边 (n为节点的数量)
if ( n-1条边包含了n个节点 ) // 有效组合
{
计算边平均值 m
for (每个边) new_w = (w-m)^2; // 原图不改变
计算new_w的图对应的最小生成树,并计算代价
比较历史代价,保留最小的
}
- 一些竞赛算法题目及解答(角谷步数,数组非排序正负数分离, 最小方差生成树)
- 算法提高 最小方差生成树
- 算法提高 最小方差生成树
- 最小方差生成树
- 算法提高 最小方差生成树 (kruskal)
- 题目:交错正负数
- 【九度】题目1392:排序生成最小的数
- 算法题目---把数组排成最小的数
- 正负数排序
- 算法:区分正负数
- 最小生成树---Kruskal算法---挑战程序设计竞赛读书笔记
- 最小方差生成树 (Kruskal)
- 蓝桥杯_算法提高_最小方差生成树(Kruskal算法)
- 正负算法生成圆
- 最小方差生成树(最小生成树)
- 算法1:一个无序的int数组,包含正负数, 排序成:左边为负数 右边为正数
- 排序生成最小的数
- 最小代价数(最小生成树) Krushal算法
- 解决:安装SQl 2008为SQL Server代理服务提供的凭据无效
- (转)Linux操作系统下/etc/hosts文件配置方法
- excel 2010 插入时间
- hdu 4185 Oil Skimming (最大匹配)
- 大学生创业贷款优惠政策及申请要求
- 一些竞赛算法题目及解答(角谷步数,数组非排序正负数分离, 最小方差生成树)
- 一个导航条的进化
- 冒泡法排序
- 毕设v0.1完成,CC2530实现燃气报警。
- 几个小算法练习
- Linux 查看corefile文件所在路径
- ExtJS4.1+MVC3+Spring.NET1.3+EF5 整合五:数据访问层
- java零碎要点---1.JAVA邮件发送的简单实现
- 2012年图灵奖获得者及他们的主要贡献