关于数组下标与个位数字(0-9)之间关系的问题

Problem 1: 检查一个整数中重复出现的数字,若有重复数字则显示 repeated;否则显示 no repeated.

本题目可以使用bool值的数组来解决:
#include<stdbool.h>
#include<stdio.h>

int main()
{
 bool a[10]={false};//初始化数组 使所有值均为false(0)
 int digit,n;
 
 printf("input n: ");
 scanf("%d",&n);
 while(n!=0)
 {
  digit=n%10;
  if(a[digit])//判断该数是否出现过 并将digit与对应下标建立起联系
   break;
  a[digit]=true;//若digit之前未出现过 则在第一次出现时将a[digit]的值变为true
  n/=10;
 }
 
 if(n!=0)
  printf("repeated\n");
 else
  printf("no repeated\n");
  
 return 0;
}

因为只需考虑有重复或无重复两种情况,因此使用bool值的数组可以完成.

Problem 2: 修改问题1,使其显示出0-9这9个数字分别出现的次数.

代码如下:

#include<stdio.h>

int main()
{
	int a[10]={0};
	int n,i;
	
	printf("input n: ");
	scanf("%d",&n);
	while(n!=0)
	{
		a[n%10]++;//若出现某一数字 则在对应下标的数组元素计数
		n/=10;
	}
	
	printf("Digit:        ");
	for(i=0;i<10;i++)
		printf("%3d",i);
	putchar('\n');
	
	printf("Occurrences:  ");
	for(i=0;i<10;i++)
		printf("%3d",*(a+i));
	putchar('\n');
	
	return 0;
}
本例中不可再使用bool值的方法,因为无法进行计数, bool类型的值只有false(0)与true(1)两种值,存储非零值会导致变量赋值为1.

keep coding.....



猜你喜欢

转载自blog.csdn.net/Huayra221/article/details/80721662