
E:一個正整數如果任何一個數位不大于右邊相鄰的數位,則稱為一個數位遞增的數,例如1135是一個數位遞增的數,而1024不是一個數位遞增的數。
給定正整數 n,請問在整數 1 至 n 中有多少個數位遞增的數?
樓主是新手,下面給出這道題的一種解法
#include<stdio.h>
#include<string.h>
int bj(int n);
int main()
{
int x,c=0,t;
scanf("%d",&x);
for(t=1;t<=x;t++)
{ if(bj(t)==1)
c++;
}
printf("%d",c);
}
int bj(int n)
{
int i=0,j,flag=1;
int a[6];
while(1)
{ if(n>=10)
a[i]=n%10;
else
{ a[i]=n;
break;
}
n=n/10;
i++;
}
for(j=0;j<=i;j++)
{if(a[j]<a[j+1])
flag=0;
}
return flag;
}
可能有點亂,思路就是定義一個陣列,一個函式,用陣列把n的每一位儲存,然后從個位開始跟左邊的數逐一比較。
uj5u.com熱心網友回復:
我自己運行了一下感覺沒問題,請大佬看看是否有更簡單的方法uj5u.com熱心網友回復:
供參考:#include<stdio.h>
bool bj(int n);
int main(int argc, char* argv[])
{
int x,c=0,t;
scanf("%d",&x);
for(t=1;t<=x;t++)
if(bj(t)) c++;
printf("%d",c);
return 0;
}
bool bj(int n)
{
int m,k;
k=n%10;
while(n){
m = n%10;
if(m>k)return false;
k = m;
n /= 10;
}
return true;
}
uj5u.com熱心網友回復:
判斷函式再簡略一步:bool bj(int n)
{
int m,k=n%10;
while(n /= 10){
m = n%10;
if(m>k)return false;
k = m;
}
return true;
}
uj5u.com熱心網友回復:
謝謝大佬指點,但為什么我生成解決方案出錯了,我用的是vc++2010。bool是什么型別,我沒見過
uj5u.com熱心網友回復:
vc里BOOL型吧,你改成BOOL試試,函式體里false改成FALSE ,true 改成TRUE。1、型別不同
BOOL為int型,微軟自定義型別:typedef int BOOL;
bool為布爾型,為C++標準的資料型別
2、長度不同
bool只有一個位元組
BOOL長度視實際環境來定,一般可認為是4個位元組,因為它本身是int型
3、取值不同
bool取值false和true,是0和1的區別
BOOL取值FALSE和TRUE,是0和非0的區別
如果數個bool物件列在一起,可能會各占一個bit,這取決于編譯器。
BOOL是微軟定義的typedef int BOOL(在windef.h中)。與bool不同,它是一個三值邏輯,TRUE/FALSE/ERROR。
uj5u.com熱心網友回復:
vc里BOOL型吧,你改成BOOL試試,函式體里false改成FALSE ,true 改成TRUE。1、型別不同
BOOL為int型,微軟自定義型別:typedef int BOOL;
bool為布爾型,為C++標準的資料型別
2、長度不同
bool只有一個位元組
BOOL長度視實際環境來定,一般可認為是4個位元組,因為它本身是int型
3、取值不同
bool取值false和true,是0和1的區別
BOOL取值FALSE和TRUE,是0和非0的區別
如果數個bool物件列在一起,可能會各占一個bit,這取決于編譯器。
BOOL是微軟定義的typedef int BOOL(在windef.h中)。與bool不同,它是一個三值邏輯,TRUE/FALSE/ERROR。
uj5u.com熱心網友回復:
謝謝大佬,把那幾個改成大寫后編譯器識別不出來了,應該不是這個問題,下面是代碼圖片和生成報錯
uj5u.com熱心網友回復:
第一種改成BOOL:#include<stdio.h>
BOOL bj(int n);
int main(int argc, char* argv[])
{
int x,c=0,t;
scanf("%d",&x);
for(t=1;t<=x;t++)
if(bj(t)) c++;
printf("%d",c);
return 0;
}
BOOL bj(int n)
{
int m,k=n%10;
while(n /= 10){
m = n%10;
if(m>k)return FALSE;
k = m;
}
return TRUE;
}
第二種改成int型:
#include<stdio.h>
int bj(int n);
int main(int argc, char* argv[])
{
int x,c=0,t;
scanf("%d",&x);
for(t=1;t<=x;t++)
if(bj(t)) c++;
printf("%d",c);
return 0;
}
int bj(int n)
{
int m,k=n%10;
while(n /= 10){
m = n%10;
if(m>k)return 0;
k = m;
}
return 1;
}
uj5u.com熱心網友回復:
第2行 第15行,提示是有語法錯誤,查下‘;’號是什么全角還是半角的。uj5u.com熱心網友回復:
上面的代碼你直接復制粘貼到你的編輯視窗里。轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/246341.html
標籤:新手樂園
