70 回文数
#include
#include
#include
int trans(char str[],int n,int len){
int i,sum,x;
sum=0;x=1;
for(i=len-1;i>=0;i--){
sum+=(str[i]-'0')*x;
x*=n;
}
return sum;
}
int huiwen(char str[],int len){
int i;
for(i=0;i<len/2;i++){
if(str[i]!=str[len-1-i])
return 0;
}
return 1;
}
int main(){
int n,len,k,temp,res;
char str[200];
scanf("%d %s",&n,str);
k=0;
len=strlen(str);
while(huiwen(str,len)==0){
k++;
len=strlen(str);
temp=trans(str,n,len);
strrev(str);
res=temp+trans(str,n,len);
itoa(res,str,n);
}
if(k<=30){
printf("STEP=%d\n",k);
}
else
printf("Impossible!\n");
return 0;
}
78 铺地毯
#include
#include
int main(){
int n,i,j,x,y,count;
int **a;
scanf("%d",&n);
a=(int **)malloc(sizeof(int *)*n);
for(i=0;i<n;i++){
a[i]=(int *)malloc(sizeof(int)*n);
}
for(i=0;i<n;i++){
for(j=0;j<4;j++)
scanf("%d",&a[i][j]);
}
scanf("%d%d",&x,&y);
count=0;
for(i=0;i<n;i++){
if(x>=a[i][0]&&x<=a[i][0]+a[i][2] && y>=a[i][1] && y<=a[i][1]+a[i][3])
count=i+1;
}
if(count){
printf("%d\n",count);
}
else{
printf("-1\n");
}
return 0;
}
80 最小乘积
他的本质就是两个数组在乘的时候一方最大*另一方最小和再相加即可
#include
#include
void sort(int a[],int n){
int i,j;
int key;
for(i=1;i<n;i++){
if(a[i]>a[i-1]){
key=a[i];
for(j=i-1;j>=0&& key>a[j];j--){
a[j+1]=a[j];
}
a[j+1]=key;
}
}
}
int main(){
int i,n,sum,N;
int *a,*b;
scanf("%d",&N);
while(N--){
scanf("%d",&n);
a=(int *)malloc(sizeof(int)*n);
b=(int *)malloc(sizeof(int)*n);
for(i=0;i<n;i++){
scanf("%d",&a[i]);
}
for(i=0;i<n;i++)
scanf("%d",&b[i]);
sort(a,n);
sort(b,n);
sum=0;
for(i=0;i<n;i++){
sum+=(a[i]*b[n-1-i]);
}
printf("%d\n",sum);
}
return 0;
}
86 瓷砖铺放
#include
int n;
int count(n){
if(n==1)
return 1;
if(n==2)
return 2;
else
return count(n-1)+count(n-2);
}
int main(){
scanf("%d",&n);
printf("%d\n",count(n));
return 0;
}