Study__Life
Study__Life
2020-12-09 23:49
采纳率: 100%
浏览 37

C语言萌新,遇到瓶颈了,有些题感觉做对了,但在OJ系统上提交通过不了,真心请求大佬帮忙

比如这里的这道Anagrams问题,两个单词若字母出现次数相等,则输出Y,否则输出N显示运行错误,刚学了数组的知识,我也在网上收了一下这题的程序,但都涉及到我还没学到知识,按道理来讲,这题只用数组的知识也能解出来的

#include <stdio.h>
int main()
{
    int i, j, c, temp1, temp2, min1, min2, d;
	char a[80], b[80];
	i = 0;
	while((a[i] = getchar()) != '\n') i++;
	a[i] = '\0';
	c = i;
	j = 0;
	while((b[j] = getchar()) != '\n') j++;
	b[j] = '\0';
	d = j;
	if(c != d)
	   printf("N");
	else 
	{
	 for(i = 0; i < c; i++)
	 {
	     if(a[i] >= 65 && a[i] <= 90) a[i] += 32;
		 if(b[i] >= 65 && b[i] <= 90) b[i] += 32;
	 }
	 for(i = 0; i < c - 1; i++)
	 {
	     min1 = i;
		 min2 = i;
		 for(j = i + 1; j < c; j++)
		 {
		     if(a[min1] > a[j]) min1 = j;
			 if(b[min2] > b[j]) min2 = j;
		 }
		 temp1 = a[i];
		 a[i] = a[min1];
		 a[min1] = temp1;
		 temp2 = b[i];
		 b[i] = b[min2];
		 b[min2] = temp2;
	 }
	 for(i = 0; i < c; i++)
	     if(a[i] != b[i]) break;
	 if(i == c) printf("Y");
	 else printf("N");
	}
	return 0;
}
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • qq_25376897
    qq_25376897 2020-12-10 11:02
    已采纳
    #include <stdio.h>
    int main()
    {
        int i, j, c, d;
    	char a[80], b[80];
    	int e[26]={0},f[26]={0};//表示26个字母出现的次数
    	i = 0;
    	while((a[i] = getchar()) != '\n') i++;
    	a[i] = '\0';
    	c = i;
    	j = 0;
    	while((b[j] = getchar()) != '\n') j++;
    	b[j] = '\0';
    	d = j;
    	if(c != d)
    	   printf("N");
    	else 
    	{
    	 for(i = 0; i < c; i++)
    	 {
    	     if(a[i] >= 'A' && a[i] <= 'Z')
    	     {
    	         e[a[i]-'A']++;//a[i]-'A',ASCII码相减得出下标,该数字代表的字母次数+1
    	     }
    	     if(a[i] >= 'a' && a[i] <= 'z')
    	     {
    	         e[a[i]-'a']++;
    	     }
    		 if(b[i] >= 'A' && b[i] <= 'Z')
    	     {
    	         f[b[i]-'A']++;
    	     }
    	     if(b[i] >= 'a' && b[i] <= 'z')
    	     {
    	         f[b[i]-'a']++;
    	     }
    	 }
    	 for(j=0;j<26;j++){
    	     if(e[j]!=f[j]){//对应字母的出现次数不相等,输出N,否则输出Y
    	         printf("N");
    	         return 0;
    	     }
    	 }
    	 printf("Y");
    	}
    	return 0;
    }
    点赞 评论
  • fly_bear_unknown
    无厘头编程 2020-12-10 02:36

    你是盲打,没有 UI 。我加了个 方程:

     

    // header

    int keyIn(char arr[], string msg);

     

    int main()

    {

        int i, j, c, temp1, temp2, min1, min2, d;

        

        int sizeA, sizeB;

        sizeA = sizeB = 0;

     

        char a[80], b[80];

     

        sizeA = keyIn(a, "Please enter a[]: "); // ask for a

        cout << "You have enter " << sizeA << " characters." << endl;

     

        sizeB = keyIn(b, "Please enter b[]: "); // ask for b

        cout << "You have enter " << sizeB << " characters." << endl;

     

        c = sizeA;

        d = sizeB;

    ...

    }

    int keyIn(char arr[], string msg) {

        int i = 0;

        cout << msg;

        while((arr[i] = getchar()) != '\n') i++;

        cout << "result: ";

        cout << arr;

        return i;

    }

     

    可是对比长度是没有意义的。

     

    点赞 评论
  • qq_25376897
    qq_25376897 2020-12-10 11:05

    上面这种写法是不区分大小写的,如果要分大小写的,把26扩展到52,同时减去相应的值以对应下标即可

    点赞 评论

相关推荐