题解

1018 五彩的卡片

Description
Tom拥有许多色彩缤纷的卡片,一共有4种颜色,分别为:红,绿,蓝,黄。
Tom随机取出N张卡片排成一列,他突然觉得不够美观。他决定替换掉某些卡片使得相邻两张卡片的颜色各不相同。
你的任务就是帮他计算出至少需要替换掉的卡片数量。由于每种颜色的卡片他都有很多,所以可以认为每种颜色的卡片数量是无限的。
Input
输入数据的第一行为一个整数N,表示序列中有N个字符(1 <= N <= 10000)。接着一行有N个字符A1,…,An,Ai为‘R’, ‘G’, ‘B’, ‘Y’中的一个字符,表示第i张卡片的颜色,R表示红色,G表示绿色,B表示蓝色,Y表示黄色。
Output
输出一个整数C,表示至少需要替换掉的卡片数。
Sample Input
10
RGGBBBRYYB
Sample Output
3

#include<stdio.h>
int main()
{
	int N,i,x=0;
	char a[10000];
	scanf("%d",&N);
	for(i=0;i<N+1;i++)
	{
		scanf("%c",&a[i]);
	}
	for(i=1;i<N;i++)
	{
		if(a[i]==a[i+1])
		{
			a[i+1]=' ';
			x++;
		}
	}printf("%d",x);
	return 0;
}
 

1019 汽车加油

Description
一辆汽车加满油后可行驶N公里。旅途中有若干个加油站。设计一个有效算法,指出应在哪些加油站停靠加油,使沿途加油次数最少。
Input
第一行有2 个正整数N和K(1 <= N <= 100,1 <= K< = 100),表示汽车加满油后可行驶N公里,且旅途中有K个加油站。接下来的1 行中,有K+1 个整数,表示第K个加油站与第K-1 个加油站之间的距离。第0 个加油站表示出发地,汽车已加满油。第K+1 个整数表示第K个加油站与目的地的距离。
Output
将编程计算出的最少加油次数输出。如果无法到达目的地,则输出
No Solution(注意:No和Solution之间有一个空格)
Sample Input
8 8
3 2 3 6 5 4 2 7 2
Sample Output
5

#include<stdio.h>
int main()
{
	int N,K,a[101],i,x=0,y,z=1;
	scanf("%d %d",&N,&K);
	for(i=0;i<K+1;i++)
	{
		scanf("%d",&a[i]);
	} 
	y=N;
	for(i=0;i<K;i++)
	{
		if(a[i]>N)
		{
			z=0;
			printf("No Solution");
			break;
		}
		else if(y-a[i]<a[i+1])
		{

			x++;
			y=N;
		}
		else
		{
			y=y-a[i];
		}
	}	
	if(z)
	    printf("%d",x);
    return 0;
}

1021 哥德巴赫猜想

哥德巴赫猜想:任何一个大于4的偶数都是两个素数之和。
你的任务是写出10000以内的哥德巴赫猜想。
Input
输入包含一组或多组测试数据。
测试数据每一行是一个偶数N(0 < N <= 10000)
输入数据以0为结束符,0不需要处理。
Output
对于每行测试数据,对应一行形式为N=a+b输出(a < b),a和b必须是素数。如果有多种结果,请输出b-a最大的一组。

#include<stdio.h>
int prime(int p)
{
	int i;
	for(i=2;i<=p;i++)
    {
    	if(p%i==0)
		{
			if(p==i)  return 1;
			else      return 0;
		}
	}
}
int main()
{
	int i,n,s,max;
	while(1)
	{
	    max=0;
		scanf("%d",&n);
	    if(n<=0||n>10000)
	    {
	       	return 0;
	    }
	    if(n==0)
    	{
	    	break;
	    } 
	    for(i=2;i<=n;i++)
	    {
			if(prime(i)==1&&prime(n-i)==1&&i<(n-i))
	        {
		        s=n-2*i;
		        if(s>max)
		        {
		  	        max=s;
		        }
 	        }
	    } 
	    printf("%d=%d+%d\n",n,(n-max)/2,(n-(n-max)/2));}
	    return 0;
 }
 

1025 IP地址

Description
常见的IP地址的表示方式为x.x.x.x,如172.16.163.66,它还可以用“位”来表示。
你的任务是将32个’0’和’1’构成的二进制序列转换为十进制的表示格式,每8位之间以’.’间隔。
Input
输入数据第一行是一个正整数N(1 <= N <= 20),表示有N组数据需要转换。
接下来的N行表示N组数据。
Output
每行输入数据对应一行输出数据。
每行输入的二进制数据对应一个十进制的输出数据,每8位以’.’间隔。
Sample Input
4
00000000000000000000000000000000
00000011100000001111111111111111
11001011100001001110010110000000
01010000000100000000000000000001
Sample Output
0.0.0.0
3.128.255.255
203.132.229.128
80.16.0.1

#include<stdio.h>
#include<stdio.h>
#include<math.h>
#include<string.h>
int main()
{
	int n,i,t=8,s=0;
	//为什么是33 32不能进行循环
	char a[33];
	scanf("%d",&n);
	while(n--)
	{
	   	scanf("%s",&a);
	   	for(i=0;a[i]!='\0';i++)
		{
		     
			s=s+(a[i]-'0')*pow(2,t-1);
		    t--; 
			if(t==0)
		    {
			    t=8;
			    printf("%d",s);
			    if(a[i+1]!='\0')
		        printf(".");
		        else
		        printf("\n");
		        s=0;
		    }	
		} 
	}
	 
	return 0;
 } 
 

1027 正确的IP

Description
IP 点分方式来显示,分成4个部分,每个部分为8位, 每个部分的范围是0-255
用程序来判断 IP地址是否写错。
Input
输入数据第一行是一个正整数N(1 <= N <= 20),表示有N组数据需要判断。
接下来的N行表示N组数据。
Output
对于每组输入数据,判断输入的IP是否正确,如果正确输入YES,否则NO。
Sample Input
3
172.16.290.3
192.168.100.16
223.16.34.2.3
Sample Output
NO
YES
NO

#include<stdio.h> 
#include<math.h>
#include<string.h>  
int fun(int *a)
{   
    int i,k=1;
    for(i=0;i<4;i++)
    {
       if(255<a[i]||a[i]<0)
       k=0;
    }
    if(k==1) 
    {
    	printf("YES\n");
	}
    if(k==0)  
    {
    	printf("NO\n");
	}
}
int main()
{
    char s[100];
    int n,i,k;
    scanf("%d",&n);
    while(n--)
    {
        scanf("%s",&s);
        int a[4]={0},i=0,num=0,k=strlen(s)-1;
        while(k>=0)
        { 
            if(s[k]!='.'&&k>=0)
            {
                a[i]+=(s[k]-'0')*pow(10,num);
                num++;
            }
            if(s[k]=='.')
            {
                i++;
                num=0;
            }
            k--;
        }
        int *p=a;
        if(i!=3)
        {
      	    printf("NO\n");
	    }
	    else
	    {
	        fun(p);
        }
    }
    return 0;
}

1055 圣诞礼物

Description
圣诞节快到了,你希望得到一个与众不同且唯一的礼物吗?
你能得到一份特别的圣诞礼物,你可以从放在桌子上的所有礼物中得到其中的一个。每份礼物都有一个号码,并且你的礼物号码将不同于其他所有的礼物号码。比如说,桌上有5份礼物,他们的号码分别为1,2,3,2,1。因此你的礼物将是编号为3的礼物,因为号码3不同于其他礼物编号。
Input
输入数据第一行是一个正整数n( 1 <= n <= 200 ),接着下一行的数据表示n个礼物的编号,编号之间以一个空格隔开。
输入数据一定存在解。
Output
输出一个整数与其对应,这个整数就是你所得礼物的编号。
Sample Input
5
1 1 3 2 2
Sample Output
3

#include<stdio.h>
#include<string.h>
int fun(int *a,int n)
{
	int i,j,count;
	for(i=0;i<n;i++)
	{
		count=0;
		for(j=0;j<n;j++)
		{
			if(a[i]==a[j])
			{
				count++;
			}
		}
		if(count==1)
		{
			printf("%d",a[i]);
		} 
	}
}
int main()
{
    int a[200],i,n;
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
    	scanf("%d",&a[i]);
	}
	fun(a,n);
	return 0;
 } 

1056 苹果

Description
把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。
Input
第一行是测试数据的数目t(0 <= t <= 20)。以下每行均包含二个整数M和N,以空格分开。1<=M,N<=10。
Output
对输入的每组数据M和N,用一行输出相应的K。
Sample Input
1
7 3
Sample Output
8

#include<stdio.h>
int Apple(int m,int n)
{
	if(m==0||n==1) return 1;
    if(n>m) 
        return Apple(m,m);
    else
        return Apple(m,n-1)+Apple(m-n,n);
}
int main()
{
    int t,a,b;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d %d",&a,&b);
        printf("%d\n",Apple(a,b));
    }
    return 0;
} 
 

1186 好基友,一辈子

Description
小明是计算机学院的大一男生,小明的人生目标是赢取白富美,走上人生巅峰。小明想分两步实现目标,第一步是赢取白富美,第二步是走上人生巅峰。小明要想实现第一步的前提条件是找个白富美,或者目标降低一点找个女的,这在计算机学院也很不容易,计算机学院男女比例严重失调。其实也不全是坏消息,小明得到的一个好消息是学院有一些好基友(专指男男同性恋),好基友是成对出现的,并且好基友不会找女朋友,你懂的。
假设小明班上有N个学生,总共有S种男女配对的组成(假设无人重名),小明想知道班上最多有多少对好基友。
Input
第一行有 2个数N和S,其中N ( 1 <= N <= 1000)表示班上有N个学生,其中S ( 1 <= N <= 250000)表示有多少种男女配对组合。输入数据一定有解。
Output
最多有多少对好基友。
Sample Input
45 210
Sample Output
8

#include<stdio.h>
int main()
{
	int N,S;
 
	int i,a,b,c=0;
	int sum[100];
	scanf("%d %d",&N,&S);
	for(a=1;a<N;a++)
	{
	    for(b=1;b<N;b++)
	    {
	    	if(a*b==S&&(a+b)<=N)
	    	{
	    		sum[c]=a+b;
	    		c++;
			}
		}
	} 
	for(i=0;i<c-1;i++)
	{
		if(sum[0]>sum[i])
		{
			sum[0]=sum[i];
		}
	}
	printf("%d",(N-sum[0])/2);
	return 0;
}

1134 计算ex的值

泰勒公式,要求最后一项的绝对值小于10-5。
Input
一个实数x。
Output
ex的值,输出结果保留3位小数。
Sample Input
1.0000
Sample Output
2.718

#include<stdio.h>
#include<math.h>
int main()
{
	double s=1,a=1,d=1.0,b=1,n=1,x;
	scanf("%lf",&x);
	while(fabs(d)>=1e-5)
	{
		a=a*n;
		n++;
		b=b*x;
		d=b/a;
		s=s+d;
	}
	printf("%0.3f",s);
	return 0;
 } 

1148 Problem E

Description
在矩形 里画一个M,把矩形分成5个区域。 再画n条红线,矩形最多被分成几个区域
Input
输入数据第一行是一个整数T,下面由T行组成,每行包含一个整数N(0<=N<=10^9)。
Output
对于每个数据,输出计算结果除以1000000007的余数,每个数据的输出占一行。
Sample Input
1
1
Sample Output
10
思路:
增加第n条线时,增加的区域的数量为n+4(可观察或用欧拉公式证明)
易得公式:n ∗ (n + 1)/2 + 4 ∗ n + 5

#include<stdio.h>
int main()
{
	long long n,s;
	int t;
	scanf("%d",&t);
	while(t--)
	{
		scanf("%I64d",&n);
		s=n*(n+1)/2+4*n+5;
		s=s%1000000007;
		printf("%I64d\n",s);
	}
	return 0;
 } 
 

1231 签到

Description
1-9这9个数字中,选3个不同的数出来,其和为奇数的组合有几个?

#include <stdio.h>
int main()
{
    int i,j,k,t=0;
    for(i=1;i<=9;i++)
        for(j=1;j<=9;j++)
            for(k=1;k<=9;k++)
                if(i!=j&&j!=k&&i!=k)
				    if((i+j+k)%2!=0) 
				        t++;     
	printf("%d\n",t/6);
	return 0;
}


1306 求和

Description
已知字符串中相邻的数字字符可以合并为一个有效数值,例如字符串“1#a#100acda06 2bbb bbb11ccccc”,其中包含的有效数值有1、100、06、2和11。输入一个字符串,求串中所有的有效数值之和。有效数值之和在整型数int范围内。
Input
一个字符串 (1<=长度<=50)
Output
字符串中所有的有效数值之和。
Sample Input
1#a#100acda06 2bbb bbb11ccccc
Sample Output
120

#include<stdio.h>
#include<string.h>
int changeNumber(char c)
{
    int num;
	num=c-48;
    return num;
}
int change(int a[],int j)
{
    int i;
    int biger=1;
    int sum=0;
    for(i=j;i>=0;i--)
    {
        sum+=a[i]*biger;
        biger*=10;
    }
    return sum;
}
 
void Zero(int a[])
{
    int i;
    for(i=0;i<100;i++)
    {
        a[i]=0;
    }
}
int main()
{
    char a[100];
    int b[100]={0};
    int i,j,sum,n;
    j=0;
	sum=0;
    gets(a); 
    n=strlen(a);  
    a[n]=';'; 
    for(i=0;a[i]!='\0';i++)
    {
        if(a[i]>='0'&&a[i]<='9') 
        {
            b[j]=changeNumber(a[i]); 
            j++;
             
        }
        else  
        {
			sum+=change(b,j-1); 
            Zero(b); 
        }
    }   
    printf("%d",sum); 
    return 0;
}

1328 买玩具

Description
一个小孩逛玩具店,如果知道他在每家玩具店的消费金额,那么他最少需要使用多少张人民币,才能在给每家店结账时都不用找零?提示:人民币有100元、50元、10元、5元、2元和1元六种面值,小孩持有的每种面值人民币足够多,但不允许多付款不找零。
Input
第一行是一个整数n(1<=n<=100),表示玩具店的数量;
第二行是n家玩具店的消费金额。
Output
最少需要使用的人民币张数
Sample Input
3
4 2 5
Sample Output
4

#include<stdio.h>
int count(int n)
{
	int i,sum=0;
	int a[6]={100,50,10,5,2,1};  //人民币面值种类 
	for(i=0;i<6;i++)
	{
		sum=sum+n/a[i];          //人民币张数 
		n=n%a[i];
	}
	return sum;
}
int main()
{
	int i,n,a[100],s=0,t=0;
	scanf("%d",&n);
	if(n<1||n>100)
	{
	   return 0;
	}
	for(i=0;i<n;i++)
	{
		scanf("%d",&a[i]);
	}
	for(i=0;i<n;i++)
	{
	    t=t+count(a[i]); 
	}
	printf("%d",t);
	return 0;
 }  


1378 zyf的字符统计

Description
对于输入的字符串(只包含小写字母),输出字符串中出现次数最多的字母。
Input
输入数据的第一行有一个整数T,表示有T组测试数据。
每组数据为一行字符串(长度小于100)。
数据保证结果唯一。
Output
输出这行字符串中出现次数最多的一个字母。
每组测试数据输出一行。
Sample Input
2
abcda
aaaabbbbbbbbbb
Sample Output
a
b

#include<stdio.h>
#include<string.h>
#define N 99 
int main()
{	
    int i,j=0,c[26]={0},t,x=0;
    int n;
    scanf("%d",&n);
	char str[99];
	while(n--)
	{
        memset(str, 0, sizeof(str));
		memset(c, 0, sizeof(c)); 
		scanf("%s",str);
	    for(i=0;i<strlen(str);i++)
		    for(j=0;j<26;j++)
			    if(str[i]=='a'+j)
			    {	
			        c[j]++;
				    break;
			    } 
	    t=c[0];
     	for(i=0;i<26;i++)
	    {
		    if(c[i]>t)
			{t=c[i];}
	    }
	    for(i=0;i<26;i++)
	    {
		    if(c[i]==t)
			{x=i;
		    break;} 
	    }
	    printf("%c\n",'a'+x); 
    }
    return 0;
}

1412 吵架

Description
求N^N的最左边那位的值

#include<stdio.h>
#include<math.h>
int main()
{
    long long sum;
    int n,m,left;
    scanf("%d",&m);
    while(m--)
    {
        scanf("%d",&n);
        sum=(long long)(n*log10(n)); 
        Left=pow(10.0,(n*log10(n)-sum)); 
        printf("%d\n",Left);
    }
     return 0;
}

1454 让我们荡起双桨

Description
过湖,船最多搭载两名,不超过最大承载重量W,用一次10美元。一共有N个人,并知道每人的实际重量,最少花费。
Input
输入为两行。
第一行包括两个整数W,N(80 <= W <= 500,1 <= N <= 100),W为木筏最大承载重量,N为总人数,空格间隔
第二行包含每个人的实际重量(已按非降序排列),每个人重量都保证小于W,空格间隔
Output
最小花费(美元)
Sample Input
100 6
40 40 45 45 50 50
Sample Output
30

#include<stdio.h>
int main()
{
	int sum=0;
	int i,j,m,n,a[100];
	scanf("%d %d",&m,&n);
	for(i=0;i<n;i++)
	{
		scanf("%d",&a[i]);
	}
	i=0;
	j=n-1;
	while(i<=j)
	{
		if(i==j)
		{    
		    //剩下一个元素的情况,单独一艘船
			sum+=10;
			break;
		}
		if(a[i]+a[j]<=m)
		{
			//首尾相加刚好满足一艘船,首尾同时往中间移动一位继续判断
			i++;
			j--;
			sum+=10;
		}
		else
		{
			//首尾之和不能一艘船,大的自己一艘船,继续往前的一个元素寻找判断
			j--;
			sum+=10;
		}
	}
	printf("%d",sum);
	return 0;
 } 

1466 零钱换整钱

Description
小明去银行存钱,拿了一堆硬币。已知1角的硬币厚度为1.8mm,5角的硬币为1.5mm,1元的硬币为2.0mm。小明将1角的硬币放成一摞,将5角的硬币硬币放成一摞,将1元的硬币放成一摞,发现3摞硬币一样高。银行正好把这些硬币换成若干张面值为10元的纸币。问小明至少带了多少钱的硬币(元为单位),每种面值的硬币有多少个?
Input

Output
1角的数量,5角的数量,1元的数量,总金额。以英文逗号间隔
Sample Output
20,30,40,50

暴力
#include<stdio.h>
 int main()
 {
 	int i,j,k;
	for(i=1;i<=100;i++)
 	    for(j=1;j<=100;j++)
		    for(k=1;k<=100;k++)
			    if(18*i==15*j&&15*j==k*20)
			        if((i*1+j*5+k*10)%100==0) 
			            printf("%d,%d,%d,%d",i,j,k,(i*1+j*5+k*10)/10);
	return 0;
 }

1493 左右

Description
小华对女朋友言听计从,昨天小华左脚踏进家门女朋友生气了,于是他决定今天右脚踏进家门。小华是个刻板的程序员,出发时,他总是先抬左脚,而且他每走一步的距离都是固定的M单位长度。已知公司离家的距离是S,你能告诉小华他今天能右脚踏进家门吗?(当小华离家距离为0时,表示他踏进家门了)
Input
输入数据为一行,包含两个正整数S和M,S( 0 < M < S <= 100000)代表公司到家的距离,M代表小华每走一步的距离。
Output
如果小华能够右脚进门输出YES,如果不能输出NO。
Sample Input
10 3
Sample Output
YES

#include<stdio.h>
int main()
{
	int s,m,t,n;
	scanf("%d %d",&s,&m);
	t=s%m;
	n=(s-t)/m;
	if(t==0)
	{
		if(n%2==0)
	    {
	        printf("YES");	
	    }
	    if(n%2!=0)
     	{
	        printf("NO");
	    }
	}
	if(t!=0)
	{
	    if(n%2==0)
	    {
	        printf("NO");	
	    }
	    if(n%2!=0)
	    {
	        printf("YES");
	    }
    }
	return 0;
 }  

1505 哥德巴赫猜想

Description
任何大于2的偶数N都是两个素数之和,假设这两个素数是X和Y,求|X-Y|最大时X和Y的值
Input
输入一个正整数N (1< N <= 10000)
Output
输出X和Y(X <= Y)
Sample Input
10
Sample Output
3 7

#include<stdio.h>
#include<math.h>
int prime(int n)
{
	int i;
	for(i=2;i<=n;i++)
    {
    	if(n%i==0)
		{
			if(n==i)  return 1;
			else      return 0;
		}
	}
}
int main()
{
	int i,j,n;
	scanf("%d",&n);
	for(i=(n-1);i>0;i--)
	{
		for(j=2;j<n;j++)
		{
			if((i+j)==n)
			{
				if(prime(i)&&prime(j))
				{
				  printf("%d %d",j,i);
		          return 0;
			    }
			}
		}
	}
	return 0;
}
 

1557 三角函数运算法则

Description
请帮助小明确定运算的结果是sin还是cos。
Input
输入一个正整数N ,代表N组测试数据(1< N <= 10)
接下来N行,每行有一个字符串X和一个角度Y(X为sin或者cos,Y为90或者180或者270),以空格间隔。
Output
sin或者cos,以换行间隔。
Sample Input
2
cos 270
sin 180
Sample Output
sin
sin

#include<stdio.h>
#include<string.h>
int main()
{
    char a[3];
    int num,n,t;
	char *q="sin"; 
	scanf("%d",&t);
	while(t--)
	{
	    scanf("%s %d",&a,&num);
        n=num/90;
        if(strcmp(a,q)==0)
        {
    	    if(n%2!=0)
            {   
    	        printf("cos\n");
	        }
	        else
	        {
		        printf("sin\n");
	        }
	    }
	    else
	    {
		    if(n%2!=0)
            {   
    	        printf("sin\n" );
	        }
	        else
	        {
		        printf("cos\n");
	        }
        }
    }
	return 0;
 } 

1580 鸭梨大冒险

Description
BOSS的地图坐标为(X,Y)。发射出N枚炮弹落在N个坐标上,每个炮弹能够攻击其半径R范围内的圆形区域(包括边界R),攻击力为A。已知BOSS初始血值是100,发动这波炮弹攻击后,BOSS还剩多少血(当敌人被干掉时,血值变为0)?
Input
第一行输入两个实数(X,Y),空格间隔,表示BOSS地图坐标
第二行输入两个整数R和A,分别表示炮弹攻击半径和攻击力
第三行输入一个整数N,表示炮弹个数
接下来是N行,每行两个实数(x,y),空格间隔,表示炮弹攻击的坐标
Output
输出为一个整数,表示剩余血值
Sample Input
0 2
2 5
2
0 3
0 -1
Sample Output
95

平台问题 数据全改成double型

#include<stdio.h>
#include<math.h>
int main()
{
    double X0,Y0,x,y;
    double life=100;
    scanf("%lf %lf",&X0,&Y0);
    double r,hit;
    scanf("%lf %lf",&r,&hit);
    double n;
    scanf("%lf",&n);
    while(n--)
    {
   	    scanf("%lf %lf",&x,&y);
	    if(sqrt((X0-x)*(X0-x)+(Y0-y)*(Y0-y))<=r)
	        life=life-hit;
		if(life<0)
		    life=0;	
	}
	printf("%.0f",life);
	return 0; 
} 

1584 纸条贴贴贴

Description
粘贴这N张纸条,那么最后墙上还剩多少张纸条?
Input
第一行输入一个正整数N,表示纸条张数
接下来为N行,每行为两个整数(Start , End),分别表示依次粘贴的纸条坐标,其中Start值保证每行是递增的
Output
输出一个整数,表示最后剩余的纸条张数
Sample Input
5
0 3
2 4
3 8
4 5
6 9
Sample Output
3

#include<stdio.h>
int main() 
{
	int i; 
	int n;
	int start,end,MaxEnd=0,t,cnt=0;
	scanf("%d",&n);
	for(i = 0; i < n; i++)
	{
		t= MaxEnd;
		scanf("%d %d", &start, &end);
		MaxEnd = MaxEnd > end ? MaxEnd : end ;
		if(start < t)
		{
			cnt++;
			MaxEnd = t < end ? t : end;
		}
	}
	printf("%d", n - cnt);
	return 0;
}

1600 最小孪生素数

Description
素数(质数)是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。我们把差值为2的素数称为孪生素数,比如:5和7,11和13。
请编写程序,接收输入正整数n,求出大于等于n的最小孪生素数。
Input
输入1行,包含1个整数,表示测试值n。
Output
输出1行,包含2个整数,表示两个孪生素数,两数间用空格分隔。
Sample Input
10
Sample Output
11 13

#include<stdio.h>
#include<math.h>
int prime(int n)
{
	int i;
	if(n<2)
	{
		return 0;
	}
	else
	{
		for(i=2;i<n;i++)
		{ 
			if(n%i==0) 
				break;
		}
		if(i<n) 
			return 0;
		else
			return 1;
    }
}
int main()
{
	int n,i;
	scanf("%d",&n);
    for(i=n;;i++)
    {
    	if(prime(i)&&prime(i+2))
    	{
		    printf("%d %d",i,i+2);
    	    break;
		}
	}
	return 0;
}


1647 进制转换(一)

Description
编写程序实现将一个十进制的正整数M(M的最大值不超过2147483647)转换为任意一个N(1 < N < 10)进制的数。
Input
输入两个正整数M和N(1 < N < 10),中间空格隔开。
Output
一个N进制的数
Sample Input
23 3
Sample Output
212
Hint
直式除法+逆序输出

#include<stdio.h>
#include<string.h>
int main()
{
	int m,n,a=0,b[1000],i=0,t=0;
	scanf("%d %d",&m,&n);
	while(1)
	{
		a=m%n;
		m=m/n;
		b[i]=a;
		i++;
		t++;
		if(m==0)
		{
			break;
		}
	}
	//逆序输出 
	for(i=t-1;i>=0;i--)
	{
		printf("%d",b[i]);
	}
	return 0;
}

1659 进制转换(二)

Description
编写程序实现将一个N(1 < N < 10)进制数M转为一个十进制数(转换后的十进制数不超过2147483647)。
Input
输入一个N进制数M(M的各个位数值均小于N)和N( 1 < N < 10),中间空格隔开。
Output
一个十进制数
Sample Input
567 8
Sample Output
375

#include<stdio.h>
#include<math.h>
#include<string.h>
int main()
{
	char a[1000];
	int s=0,y,i,n,len;
	scanf("%s",a);
	scanf("%d",&n);
	len=strlen(a);
	y=len-1;
	for(i=0;i<len;i++)
	{
		//转换值
		s=s+(a[i]-'0')*pow(n,y);
		y--;
	}
	printf("%d",s);
	return 0;
}

1671 交叉换位数

Description
编写程序实现将一个包含n(1 < n < 7)位数字(数字不含0)的正整数m,交换数字中轴最近的两位数(如m=1234中2和3;m=12345中2和4),并输出与原数的和s。例如:m=1234,交换数字中轴最近的两位数后为1324,输出结果为2558
Input
输入一个包含n(1 < n < 7)位数字(不含0)的正整数m。
Output
经交换数字中轴最近的两位数后的正整数及与原数的和。
Sample Input
样例1:
135
样例2:
1231
Sample Output
样例1:
666
样例2:
2552

#include<stdio.h>
#include<string.h>
#include<math.h>
int fun(char a[],int n)
{
	int i,num=0;
    for(i=0;i<n;i++)
    {
	    num=num*10+a[i]-'0'; 
    }
    return num;
} 
int main()
{
	int n,i,j=1;
	char t;
	char a[6],b[6];
	gets(a);
	n=strlen(a);
	if(n<=1||n>=7)
	{
		return 0;
	}
	for(i=0;i<n;i++)
	{
	    if(a[i]=='0')
	    {
	    	j=0;
		}
	}
	if(j==1)
	{
	    for(i=0;i<n;i++)
	    {
	        b[i]=a[i];
	    }
	    if(n%2==0)
	    { 
		    t=b[n/2];
		    b[n/2]=b[n/2]-1;
		    b[n/2-1]=t; 
	        printf("%d",fun(a,n)+fun(b,n));
        }
        else
        {
    	    t=b[(int)n/2+1];
		    b[(int)n/2+1]=b[(int)n/2-1];
		    b[(int)n/2-1]=t; 
		    printf("%d",fun(a,n)+fun(b,n));
	    }
    }
	return 0;
 } 
  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值