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
  • 相关阅读:
    401. Binary Watch
    46. Permutations
    61. Rotate List
    142. Linked List Cycle II
    86. Partition List
    234. Palindrome Linked List
    19. Remove Nth Node From End of List
    141. Linked List Cycle
    524. Longest Word in Dictionary through Deleting
    android ListView详解
  • 原文地址:https://www.cnblogs.com/Deribs4/p/4292021.html
Copyright © 2011-2022 走看看