hdu水題十道,提高鳥語能力~~ 1032 1029 1033 1036 1037 1038 1039 1047 1856 1060 1061

1 hdu 1032

#include <iostream>
using namespace std;

int len(int n)
{
	int s  = 1;
	while (n!=1)
	{
		if (n&1) n = 3*n +1;
		else n /= 2;
		s++;
	}
	return s;
}

int main()
{
	int i, j, n, l, m;
	while (~scanf("%d %d", &i, &j))
	{
		printf("%d %d", i, j);
		if (i>j) swap(i, j);
		m = 0;
		for (;i<=j;++i)
		{
			l = len(i);
			if (m<l) m = l;
		}
		printf(" %d\n", m);
	}
	return 0;
}

 2 hdu 1029 (鴿巢原理) 

#include <iostream>
using namespace std;

int main()
{
	int ans, n, c, num;
	while (~scanf("%d", &n))
	{
		c = 0;
		for (int i=1;i<=n;++i)
		{
			scanf("%d", &ans);
			if (c==0)
			{
				num = ans;
				c ++;
			}
			else if (ans == num) c ++;
			else c --;
		}
		printf("%d\n", num);
	}
	return 0;
}

3 hdu 1033 題目看到蛋碎 

#include <iostream>
using namespace std;
int f[4][2] = {0,10,10,0,0,-10,-10,0};
void move(int &x, int &y, char c, int &s)
{
	int u;
	switch (s)
	{
		case 0: if (c=='V') u = 0, s = 1; else u = 2, s = 3; break;
		case 1: if (c=='V') u = 3, s = 2; else u = 1, s = 0; break;
		case 2: if (c=='V') u = 2, s = 3; else u = 0, s = 1; break;
		case 3: if (c=='V') u = 1, s = 0; else u = 3, s = 2; break;
	}
	x += f[u][0];
	y += f[u][1];
}

int main()
{
	char c[300];
	int i, k;
	while (~scanf("%s", c))
	{
		k = strlen(c);
		printf("300 420 moveto\n310 420 lineto\n");
		int x = 310, y = 420, s = 0;
		for (i=0;i<k;++i)
		{
			move(x, y, c[i], s);
			printf("%d %d lineto\n", x, y);
		}
		printf("stroke\nshowpage\n");
	}
	return 0;
}

4 hdu 1036  sscanf的用法

#include <iostream>
using namespace std;

int main()
{
	int f, n, i, a, sum, h, m, s;
	double d;
	char c[20], t[100];
	scanf("%d%lf", &n, &d);
 	while (~scanf("%d", &a))
 	{
		sum = f = 0;
		for (i=1;i<=n;++i)
		{
			scanf("%s", c);
			if (c[0] == '-') f = 1;
			sscanf(c, "%d:%d:%d", &h, &m, &s);
			sum += h*3600 + m*60 + s;
		}
		if (f) printf("%3d: -\n", a);
		else
		{
			sum = int(sum/d + 0.5);
			printf("%3d: %d:%2.2d min/km\n", a, sum/60, sum%60);
		}
	}
	return 0;
}
			

5 hdu 1037 不解釋 

#include <iostream>
using namespace std;
int main()
{
  int h1, h2, h3;
  while (~scanf("%d %d %d", &h1, &h2, &h3))
  {
    if (h1>=168 && h2>=168 && h3>=168)
    printf("NO CRASH\n");
    else
    {
      printf("CRASH ");
      if (h1<168)
      {
         printf("%d\n",h1);
         break;
      }
      if (h2<168)
      {
         printf("%d\n",h2);
         break;
      }
      if (h3<168)
      {
         printf("%d\n",h3);
         break;
      }
    }
  } 
  return 0;
}

6 hdu 1038 

#include <stdio.h>
#define P 3.1415926
int main()
{
    double diameter, revolutions, time;
    double sum, zong;
    int n = 0;

    while(~scanf("%lf%lf%lf",&diameter,&revolutions,&time))
    {
        if (revolutions==0) break;
        n++;
        sum = 0;
        zong = 0;
        sum = diameter / 12 / 5280 * P * revolutions * time;
        zong = sum/time;
        sum = zong / time * 60 * 60;
        printf("Trip #%d: %.2lf %.2lf\n",n,zong,sum);
    }
    return 0;
}

7 hdu 1039  

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#define MAX_LEN 1111

char psd[MAX_LEN];
const char end[] = "end";
const char s1[] = "aeiou";

int c1(void)
{
	int i,j;
	for(i=0;psd[i]!='\0';i++)
		for(j=0;s1[j]!='\0';j++)
			if(psd[i]==s1[j])
				return 1;
	return 0;
}

int c2(void)
{
	int i,j,cnt1,cnt2,tag;
	cnt1=cnt2=0;
	for(i=0;psd[i]!='\0';i++)
	{
		for(j=0,tag=0;s1[j]!='\0';j++)
			if(psd[i]==s1[j])
			{
				cnt1++;
				cnt2=0;
				tag=1;
				break;
			}
		if(tag==0)
		{
			cnt1=0;
			cnt2++;
		}
		if(cnt1>=3 || cnt2>=3)
			return 0;
	}
	return 1;
}

int c3(void)
{
	int i;
	for(i=1;psd[i]!='\0';i++)
		if(psd[i]==psd[i-1])
			if(psd[i]!='e' && psd[i]!='o')
				return 0;
	return 1;
}

int main(void)
{
#ifndef ONLINE_JUDGE
	assert(freopen("1039.in","r",stdin));
#endif
	while(scanf("%s",psd),strcmp(psd,end))
	{
		if(c1() && c2() && c3())
			printf("<%s> is acceptable.\n",psd);
		else
			printf("<%s> is not acceptable.\n",psd);
	}
	return 0;
}

8 hdu 1047

大正整數加。

腦抽用string。。。越寫越醜。。。還好一遍a了,避免了重敲的宿命。。

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#define clr(x, k) memset((x), (k), sizeof(x))
const int N = 1000;
using namespace std;
//char a[N], x[N];
string x, a;
int l;
void re(string &x)
{
	int i = 0;
	int j = x.length() -1;
	while (i<j)
		swap(x[i++], x[j--]);
}
void add(string &a, string &x)
{
	int i, j, ma, mi;
	ma = a.length();
	mi = x.length();
	if (ma<mi)
	{
		swap(ma, mi);
		swap(a, x);
	}
	for (i=0;i<mi;++i) a[i] += x[i]-'0';
	for (i=0;i<ma;++i)
	if (a[i]>'9')
	{
		if (i+1<ma) a[i+1] += (a[i]-'0')/10;
		else a.insert(i+1,1,(a[i]-'0')/10+'0');
  	a[i] -= 10;
	}
}
int main()
{
	int n;
	scanf("%d", &n);
	while (n--)
	{
		l = 1;
		a = "0";
		while (cin>>x)
		{
			re(x);
			if (x == "0")
			{
				re(a);
				cout<<a<<endl;
				if (n!=0) cout<<endl;
				break;
			}
			add(a, x);
		}
	}
	return 0;
}
		

9 hdu 1856 ans初值爲1,wa了幾次才找到。。。 

#include <iostream>
using namespace std;
const int N = 10000002;
int n, m;
int f[N], r[N];

int find(int x)
{
	if (f[x]!=x) f[x] = find(f[x]);
	return f[x];
}

int main()
{
	int x, y, i, ans;
	while (scanf("%d", &n)!=EOF)
	{
		for (i=0;i<=N;++i)
		{
			f[i] = i;
			r[i] = 1;
		}
		ans = 1;
		for (i=0;i<n;++i)
		{
			scanf("%d %d", &x, &y);
			x = find(x);
			y = find(y);
			if (x>y) swap(x, y);
			if (x!=y)
			{
				f[y] = x;
				r[x] += r[y];
				if (r[x]>ans) ans = r[x];
			}
		}
		printf("%d\n", ans);
	}
	return 0;
}
		

 

10 hdu 1060 

題目大意是輸入N,求N^N的最高位數字。1<=N<=1,000,000,000
N^N  = a*10^x;
我們要求的最右邊的數字就是(int)a,即a的整數部分
兩邊同時取以10爲底的對數 lg(N^N) = lg(a*10^x) ;
N*lg(N)  = lg(a) + x;

N*lg(N) - x = lg(a)

a = 10^(N*lg(N) - x);

現在就只有x是未知的了,如果能用n來表示x的話,這題就解出來了。

又因爲,x是N^N的位數-1。比如 N^N = 1200  ==>  x = 3;   

實際上就是 x 就是lg(N^N) 向下取整數,表示爲[lg(N^N)]

a = 10^(N*lg(N) – [lg(N^N)]);

然後(int)a 就是答案了。

 
#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
int main(){
    int t;
    __int64 ans,n;
    double m;
    scanf("%d",&t);
    while(t--){
         scanf("%I64d",&n);
         m=n*log10(n+0.0);
         m-=(__int64)m;
         ans=pow((double)10,m);
         printf("%I64d\n",ans);   
    }
return 0;
}

11 hdu 1061 N^N%10

#include <cstdio>
#include <cstdlib>
#define I64 __int64
int Fuction(I64 n)
{
   int res = 1;
   I64 b = n;
   if(!n)                             // n==0, 輸出1
      return 1;
   if(!(n % 10))
      return 0;
   while(b)
   {
      if(b & 1)
      {
         res *= n;
         res %= 10;                      //  要取模,否則溢出
      }
      n *= n;
      n %= 10;                            //  要取模,否則溢出
      b >>= 1;
   }
   return res % 10;
}
int main()
{
   int t;
   I64 n;
   scanf("%d", &t);
   while(t--)
   {
      scanf("%I64d", &n);
      printf("%d\n", Fuction(n));
   }
   return 0;
}

//題目分析:求n^n的個位數,只要根據每一個數的冪的週期性規律,就行了
#include <stdio.h>
int main()
{
       int m,n,a;
       int s[10][4]={{0},{1},{6,2,4,8},{1,3,9,7},{6,4},{5},{6},
       {1,7,9,3},{6,8,4,2},{1,9}};

       scanf("%d",&m);
       while(m--)
			 {
	        scanf("%d",&n);
	        a=n % 10;
	        if(a==0||a==1||a==5||a==6)
	               printf("%d\n",a);
	        else if(a==4||a==9)
	               printf("%d\n",s[a][n%2]);
	        else if(a==2||a==3||a==7||a==8)
	               printf("%d\n",s[a][n%4]);
       }
       return 0;
}



 

 

 

 

 

 

發佈了58 篇原創文章 · 獲贊 9 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章