Kiểm tra xem các chữ số của số nguyên dương n có giảm dần/ tăng dần từ trái sang phải không?

Chỉ dùng vòng lặp không dùng mảng nha.tks mọi người

dùng phép trừ thôi. ‘3’
tăng dần thì a[i] - a[i-1] phải >0
giảm dần thì a[i] - a[i-1] phải <0.
ko dùng mảng thì dùng 2 biến a,b để lưu a[i] và a[i-1]

3 Likes

Người thảo luận để tìm ra cách giải hay cho một bài toán khó sẽ trở thành lập trình viên giỏi. Người hay hỏi bài tập thì không. Còn bạn thì sao?

3 Likes

Bạn có thể biến đổi bài toán thành kiểm tra các chữ số của số nguyên dương có tăng dần từ phải qua trái không? sẽ dễ làm hơn đó

Mã giả

while (n>=10)
{
        int donvi=n%10;
        n=n/10;
        if(donvi>n%10)
        {
            return false;
        }
}
reutrn true;

3 Likes
#include<stdio.h>
main()
{
  int n,cs1,cs2,i=0,k=0;
  printf("Nhap so n: ");
  scanf("%d",&n);
  cs1=n%10;
  n=n/10;
  while(n!=0) 
  {
    cs2=n%10;
    if(cs1>cs2) i=1;
    if(cs2>cs1) k=1;
    if(cs2==cs1) return printf("khong tang khong giam");
    cs1=cs2; n=n/10;
  } 
  if(i==1 && k==1) printf("Khong tang khong giam\n"); 
  if(i==1 && k==0) printf("Tang\n"); 
  if(i==0 && k==1) printf("Giam\n"); 
  if(i==0 && k==0) printf("Khong tang khong giam\n");
}

cảm ơn mn đã quan tâm.

Lần sau bạn nhớ dùng Markdown để đăng code nhé :slight_smile: ,nhìn sẽ đẹp và dễ nhìn hơn :slight_smile:

1 Like

Mình làm theo cách của bạn nhưng không hiểu vì sao lại báo lỗi về thuật toán làm bằng mảng. Ai biết về vấn đề này chỉ mình với

cho mình hỏi về cái mà cs1=cs2 là sao vậy bạn mình không hỉu lắm

#include<iostream>
using namespace std;
void KT(int n)
{
	int st = n % 10, ss, kt1 = 0, kt2 = 0;
	n = n / 10;
	while (n != 0)
	{
		ss = n % 10;
		if (st < ss) kt1 = 1;
		if (st > ss) kt2 = 1;
		st = ss;
		n = n / 10;
	}
	if (kt1 == 0 && kt2 == 1) cout << "La so tang dan \n";
	if (kt2 == 0 && kt1 == 1) cout << "La so giam dan \n";
	if (kt1 == 1 && kt2 == 1|| kt1 == 0 && kt2 == 0) cout << "La so khong tang va khong giam \n";
}

int main()
{
	int n;
	cout << "Nhap vao so nguyen duong n(n>0):";cin >> n;
	if (n < 1)
	{
		do { cout << "Vui long nhap dung n(n>0):";cin >> n; } while (n < 1);
	}
	KT(n);
	system("pause");
}

gán giá trị cs2 vào cs1 và tiếp tục vòng lặp thôi.
vd : 54321
cs1 = 1 ; cs2 = 2
cs1 = 2 ; cs2 = 3 và tiếp tục như vậy.
Theo mình là vậy =)

#include<stdio.h>
bool giam(int n);
bool tang(int n);
int check(int n);
int main(){
	int n;
	printf("nhap n: "); scanf("%d", &n);
	if(check(n)==1)
		printf("Co thu tu");
	else
		printf("Khong co thu tu");
	return 0;
}
bool giam(int n){
	while (n>=10)
{
        int donvi=n%10;
        n=n/10;
        if(donvi>n%10)
        {
            return false;
        }
}
return true;
}
bool tang(int n){
	while (n>=10)
{
        int donvi=n%10;
        n=n/10;
        if(donvi<n%10)
        {
            return false;
        }
}
	return true;
}
int check(int n){
	int m;
	m=n%10;
	n=n/10;
	if(m!=n%10)
		{
		if(m>n%10)
			if(tang(n)==true)
				return 1;
			else
				return 0;
		else
			if(giam(n)==true)
				return 1;
			else
				return 0;
		}
	else
		check(n);
}
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?