zoukankan      html  css  js  c++  java
  • 九度oj 1031 xxx定律 2009年浙江大学计算机及软件工程研究生机试真题

    题目1031:xxx定律

    时间限制:1 秒

    内存限制:32 兆

    特殊判题:

    提交:5153

    解决:3298

    题目描述:
        对于一个数n,如果是偶数,就把n砍掉一半;如果是奇数,把n变成 3*n+ 1后砍掉一半,直到该数变为1为止。
        请计算需要经过几步才能将n变到1,具体可见样例。
    输入:
        测试包含多个用例,每个用例包含一个整数n,当n为0 时表示输入结束。(1<=n<=10000)
    输出:
        对于每组测试用例请输出一个数,表示需要经过的步数,每组输出占一行。
    样例输入:
    3
    1
    0
    样例输出:
    5
    0
    来源:
    2009年浙江大学计算机及软件工程研究生机试真题
     1 #include <cstdio>
     2 #include<algorithm>
     3 #include<iostream>
     4 #include<string>
     5 #include<cstring>
     6 #include<vector>
     7 using namespace std;
     8 struct point{
     9     int dis,cost;
    10 };
    11 point p[1005];
    12 int map[1005][1005][2];
    13 #define inf 999999999
    14 int main(){
    15     //freopen("D://INPUT.txt","r",stdin);
    16     int n,m;
    17     while(cin>>n>>m&&n&&m){
    18     int i=0,j;
    19     for(i=1;i<=n;i++){
    20         for(j=1;j<=n;j++){
    21             map[i][j][0]=inf;
    22             map[i][j][1]=inf;
    23         }
    24     }
    25     i=0;
    26     for(;i<m;i++){
    27         int a,b;
    28         cin>>a>>b;
    29         cin>>map[b][a][0]>>map[b][a][1];
    30         map[a][b][0]=map[b][a][0];
    31         map[a][b][1]=map[b][a][1];
    32     }
    33     int s,e;
    34     cin>>s>>e;
    35     //cout<<s<<e<<endl; 
    36     p[s].cost=0;
    37     p[s].dis=0;
    38     i=1;
    39     for(;i<=n;i++){
    40         if(i==s)
    41         continue;
    42         p[i].dis=map[s][i][0];
    43         p[i].cost=map[s][i][1];
    44     }
    45     i=1;
    46     for(;i<n;i++){
    47         int j,min=inf,k;
    48         for(j=1;j<=n;j++){
    49             if(p[j].dis&&p[j].dis<min){
    50                 min=p[j].dis;
    51                 k=j;
    52             }
    53         }
    54         if(k==e){
    55             break;
    56         }
    57         for(j=1;j<=n;j++){
    58             if(p[j].dis>p[k].dis+map[k][j][0]){
    59                 p[j].dis=p[k].dis+map[k][j][0];
    60                 p[j].cost=p[k].cost+map[k][j][1];
    61             }
    62             else{
    63                 if(p[j].dis==p[k].dis+map[k][j][0]){
    64                     p[j].cost=p[k].cost+map[k][j][1]>p[j].cost?p[j].cost:p[k].cost+map[k][j][1];
    65                 }
    66             }
    67         }
    68         p[k].dis=0;
    69     }
    70     cout<<p[e].dis<<' '<<p[e].cost<<endl;
    71     }
    72     return 0;
    73 }
    74 /**************************************************************
    75     Problem: 1008
    76     User: Deribs4
    77     Language: C++
    78     Result: Accepted
    79     Time:20 ms
    80     Memory:9416 kb
    81 ****************************************************************/
    View Code
  • 相关阅读:
    asp.net 邮件发送,使用外部stmp服务器,呵呵!简单例子
    asp.net 新闻采集 简单示例
    JS 计算时间差
    textarea行尾输入多个空格不换行
    mac系统安装redis
    RSA 分段加解密【解决“不正确的长度”的异常】
    C# 获取指定进程的主窗口句柄
    .Net自定义控件之ToolboxBitmap元数据的设置
    提升 SharePoint 代码执行权限
    关于ThreadLocal的使用
  • 原文地址:https://www.cnblogs.com/Deribs4/p/4292021.html
Copyright © 2011-2022 走看看