A题:
给出一个数,对这个数上的每一个位置的数可进行一种操作:
i(0到9)可变为9-i。
问给出的这个数经过一系列操作后,可能变成的最小的数是什么。
注意:一个数的首位不能为0.
注意:注意char和int是怎么变换的。
1 #include<cstdio> 2 #include<cstring> 3 int main() 4 { 5 char s[30]; 6 while(scanf("%s",&s)!=EOF){ 7 int len=strlen(s); 8 int aa=s[0]-'0'; 9 if(aa>=5&&aa!=9) 10 s[0]=(char)('9'-aa); 11 for(int i=1;i<len;i++){ 12 aa=s[i]-'0'; 13 if(aa>=5) 14 s[i]=(char)('9'-aa); 15 } 16 for(int i=0;i<len;i++) 17 printf("%c",s[i]); 18 printf(" "); 19 } 20 return 0; 21 }
B题:
有n+1个点,其中一个为Han Solo的位置,他有一把很厉害的枪,能够把某条直线(这条直线必须过Han Solo的点)上的敌人统统消灭。然后给出其他n个点,问至少需要开多少枪。
需要多少枪,则相当于问需要多少条直线,即多少个斜率,用set存放斜率的数量就好啦。
注意:xi-x0==0时斜率不存在,需要先判断。
1 #include<cstdio> 2 #include<set> 3 using namespace std; 4 set<double>s; 5 int main() 6 { 7 int n; 8 while(scanf("%d",&n)!=EOF){ 9 s.clear(); 10 double x0,y0; 11 bool cnt=false; 12 scanf("%lf%lf",&x0,&y0); 13 double xi,yi; 14 for(int i=1;i<=n;i++){ 15 scanf("%lf%lf",&xi,&yi); 16 xi-=x0; 17 yi-=y0; 18 if(xi==0) 19 cnt=true; 20 else{ 21 double k=(double)(yi/xi); 22 s.insert(k); 23 } 24 } 25 int sum=s.size(); 26 if(cnt) 27 sum++; 28 printf("%d ",sum); 29 } 30 return 0; 31 }