一.目的:
總結一下之前寫過的兩個有意思的題。一個是關於字符串的處理,一個考驗思維。
題目大意
1:cantor表
http://codevs.cn/problem/1083/
2:笨小猴
http://codevs.cn/problem/1053/
Cantor表的解題思路
1:一開始我想的是創建一個二維數組來存儲數據,因爲每一個數據都是他所在的行比上對應的列,而
且排列的時候它的順序是不一樣的,當列爲偶數時它是斜着由上到下的順序,而當列爲奇數時它是斜着由下到上。
2:後來由於它的輸出是個比值形式,我就感覺存儲每一個值沒有必要,因爲在計算機中它保存的是一
個整形數而不是比值形式。因爲每次斜着數對應的個數爲1,2,3,4—,這個和它的列數是一一對應的,所以由所輸入的n來確定它的列,再用一個變量來記錄他在這條斜邊上操作的次數,然後改變分子和分母就行。
代碼:
# include <stdio.h>
# define MAX 100;
int c = 0;
int main(void)
{
int n,i,j,k;
scanf("%d",&n);
double sum = 0;
for(i = 1; i<=1000; i++)
{
int t = 0;//t是用來保存他在斜邊上的處理次數
for(j = 1; j<=i; j++)
{
sum+=1;
t+=1;
if(sum == n)//找出所對應的列值
{
c = t;
k = i;
break;
}
}
}
if(k%2==0)
{
int a = 1;
int b = k;
for(j = 1; j<c; j++)
{
a+=1;
b-=1;
}
printf("%d/%d\n",a,b);
}
else{
int a = k;
int b = 1;
for(j = 1; j<c; j++)
{
a-=1;
b+=1;
}
printf("%d/%d\n",a,b);
}
return 0;
}
笨小猴的解題思路:
笨小猴這道題很簡單,就是找字符串中某一個字母出現最多的次數,和出現最小的次數,就這一塊有一些意思,
str[a[i]-‘a’]++;在對該數組進行排序,找出第一個大於0的次數,就是所對應最小的次數。
代碼:
# include <stdio.h>
# define MAX 100;
int c = 0;
int main(void)
{
int n,i,j,k;
scanf("%d",&n);
double sum = 0;
for(i = 1; i<=1000; i++)
{
int t = 0;//t是用來保存他在斜邊上的處理次數
for(j = 1; j<=i; j++)
{
sum+=1;
t+=1;
if(sum == n)//找出所對應的列值
{
c = t;
k = i;
break;
}
}
}
if(k%2==0)
{
int a = 1;
int b = k;
for(j = 1; j<c; j++)
{
a+=1;
b-=1;
}
printf("%d/%d\n",a,b);
}
else{
int a = k;
int b = 1;
for(j = 1; j<c; j++)
{
a-=1;
b+=1;
}
printf("%d/%d\n",a,b);
}
return 0;
}