cantor表和笨小猴(水题)

一.目的:

总结一下之前写过的两个有意思的题。一个是关于字符串的处理,一个考验思维。

题目大意

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;
 } 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值