文章目录
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;
}